環境資訊中心綜合外電;姜唯 編譯;林大利 審校
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!
※網頁設計公司推薦不同的風格,搶佔消費者視覺第一線
※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整
※南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!
※教你寫出一流的銷售文案?
※超省錢租車方案
北部有線電視-提供穩定的寬頻光纖上網、高畫質HD數位頻道、第四台電視、數位電視,現在申辦免費體驗3個月"HD99高畫質套餐"
有些時候我們會發現方法名稱都正確匹配,但就是找不到對應請求接口,所以本文我們來深入了解下何時會出現接口請求404的情況。
首先我們創建一個web api應用程序,我們給出如下示例控制器代碼
[ApiController] [Route("[controller]/[action]")] public class WeatherController : ControllerBase { [HttpGet] string Get() { return "Hello World"; } }
當我們進行如上請求時會發現接口請求不到,這是為何呢?細心的你應該可能發現了,對於請求方法是私有,而不是公共的,當我們加上public就可以請求到了接口
[HttpGet("get")] public string Get() { return "Hello World"; }
經過如上示例,那麼對於Action方法的到底要滿足怎樣的定義才能夠不至於請求不到呢?接下來我們看看源碼怎麼講。我們找到DefaultApplicationModelProvider類,在此類中有一個OnProvidersExecuting方法用來構建控制器和Action方法模型,當我們構建完畢所有滿足條件的控制器模型后,緊接着勢必會遍歷控制器模型去獲取對應控制器模型下的Action方法,這裏只截取獲取Action方法片段,源碼如下:
foreach (var controllerType in context.ControllerTypes) { //獲取控制器模型下的Action方法 foreach (var methodInfo in controllerType.AsType().GetMethods()) { var actionModel = CreateActionModel(controllerType, methodInfo); if (actionModel == null) { continue; } actionModel.Controller = controllerModel; controllerModel.Actions.Add(actionModel); } }
上述紅色標記則是創建Action模型的重點,我們繼續往下看到底滿足哪些條件才創建Action模型呢?
protected virtual ActionModel CreateActionModel(TypeInfo typeInfo, MethodInfo methodInfo) { if (typeInfo == null) { throw new ArgumentNullException(nameof(typeInfo)); } if (methodInfo == null) { throw new ArgumentNullException(nameof(methodInfo)); } if (!IsAction(typeInfo, methodInfo)) { return null; } ...... }
到了這個方法裏面,我們找到了如何確定一個方法為Action方法的源頭,由於該方法有點長,這裏我採用文字敘述來作為判斷邏輯,如下:
protected virtual bool IsAction(TypeInfo typeInfo, MethodInfo methodInfo) { //如果有屬性訪問器(無效) //如果有NonAction特性標識無效) //如果重寫Equals(Object), GetHashCode()方法(無效) //如果實現Dispose方法(無效) //如果是靜態方法(無效) //如果是抽象方法(無效) //如果是構造函數(無效) //如果是泛型方法(無效) //必須為公共方法 return methodInfo.IsPublic; }
如上是從方法定義的角度來過濾而獲取Action方法,除此之外,我們請求方法的名稱還可以自定義,比如通過路由、ActionName特性指定,那麼這二者是否存在優先級呢?比如如下示例:
[ApiController] [Route("[controller]/[action]")] public class WeatherController : ControllerBase { [HttpGet] [ActionName("get1")] public string get() { var routeValue = HttpContext.Request.RouteValues.FirstOrDefault(); return routeValue.Value.ToString(); } }
我們可以看到此時將以ActionName特性作為方法名稱。所以在上述過濾方法定義后開始構建方法模型,在此之後還會再做一步操作,那就是查找該方法是否通過ActionName特性標識,若存在則以ActionName特性標識給定的名稱作為請求方法名稱,否則以方法定義名稱為準,源碼如下:
var actionModel = new ActionModel(methodInfo, attributes); AddRange(actionModel.Filters, attributes.OfType<IFilterMetadata>()); var actionName = attributes.OfType<ActionNameAttribute>().FirstOrDefault(); if (actionName?.Name != null) { actionModel.ActionName = actionName.Name; } else { actionModel.ActionName = methodInfo.Name; }
還沒完,若是將路由特性放到Action方法上,如下,此時請求接口應該是weather/get還是weather/get1呢?
[ApiController] public class WeatherController : ControllerBase { [HttpGet] [Route("weather/get")] [ActionName("get1")] public string get() { var routeValue = HttpContext.Request.RouteValues.FirstOrDefault(); return routeValue.Value.ToString(); } }
此時若我們以weather/get1請求將出現404,還是以路由特性模板給定為準進行請求,但最終會將路由上Action方法名稱通過ActionName特性上的名稱賦值給Action模型中的ActionName進行覆蓋,源碼如下,所以上述我們得到的action名稱為get1,,當然這麼做沒有任何實際意義。
public static void AddRouteValues(ControllerActionDescriptor actionDescriptor,ControllerModel controller,ActionModel action) { foreach (var kvp in action.RouteValues) { if (!actionDescriptor.RouteValues.ContainsKey(kvp.Key)) { actionDescriptor.RouteValues.Add(kvp.Key, kvp.Value); } } if (!actionDescriptor.RouteValues.ContainsKey("action")) { actionDescriptor.RouteValues.Add("action", action.ActionName ?? string.Empty); } if (!actionDescriptor.RouteValues.ContainsKey("controller")) { actionDescriptor.RouteValues.Add("controller", controller.ControllerName); } }
本文我們只是單獨針對查找Action方法名稱匹配問題做了進一步的探討,根據源碼分析,對Action方法名稱指定會做3步操作:第一,根據方法定義進行過濾篩選,第二,若方法通過AcionName特性標識則以其所給名稱為準,否則以方法名稱為準,最終賦值給ActionModel上的ActionName屬性,第三,將ActionModel上的ActionName值賦值給路由集合中的鍵Action。
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※帶您來了解什麼是 USB CONNECTOR ?
※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面
※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!
※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※教你寫出一流的銷售文案?
摘錄自2019年10月14日中央社報導
統計顯示,越南年均機車購買量達逾300萬輛,世界上僅次於印度、中國和印尼,目前河內市共有近74萬輛汽車和570萬輛機車,胡志明市共有逾73萬輛汽車和715萬輛機車。越南目前沒有機車排氣等定期檢驗制度。機車排氣被視為越南各城市最大空氣污染來源之一。
越南「民智報」新聞網站10日報導,南部胡志明市交通廳以機車排氣污染可能嚴重影響到民眾身體健康為由表示,將與資源與環境廳和越南機車製造商協會等單位討論制定機車排氣管制方案,再向中央政府提交審核。
此外,越南首都河內市資源與環境廳日前舉行一項有關空氣污染的會議,越南環境總局前副總局長黃楊松(Hoang Duong Tung)建議,政府應實施機車排氣定期檢驗。
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!
※網頁設計公司推薦不同的風格,搶佔消費者視覺第一線
※Google地圖已可更新顯示潭子電動車充電站設置地點!!
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※別再煩惱如何寫文案,掌握八大原則!
摘錄自2019年10月14日中央社報導
南韓聯合新聞通訊社報導,南韓海洋水產部14日表示,中國漁船的非法捕撈行為導致海洋資源逐漸減少,亟需採取資源管理措施。韓國與中國漁政船即起啟動相關海域聯合巡邏,展開為期7天的打擊非法捕撈行動。執行任務的漁政船為南韓西海漁業管理團所屬「無窮花35號」,中國部分則為海警局北海分局「6306」船艇。
南韓海洋水產部表示,韓中兩國2014年首次執行聯合巡邏,至今共進行8次,總共攔截31艘中國非法捕撈漁船。
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※網頁設計公司推薦不同的風格,搶佔消費者視覺第一線
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面
※南投搬家公司費用需注意的眉眉角角,別等搬了再說!
※新北清潔公司,居家、辦公、裝潢細清專業服務
※教你寫出一流的銷售文案?
摘錄自2019年10月13日中央社報導
新南威爾斯省近年飽受乾旱之苦。路透社報導,澳洲政13日表示,聯邦當局和新南威爾斯省政府將花費6億5000萬澳幣,升級新南威爾斯省中西部的懷安加拉大壩(Wyangala Dam),並投資4億8000萬澳幣,在坦幄斯(Tamworth)附近興建新的頓格萬大壩(Dungowan Dam)。
澳洲總理莫里森(Scott Morrison)在聲明中說:「鄉村和區域社區持續受到乾旱影響,對此,我們的應對方式既全面又堅定。」「這滿足了對財政援助和長期投資的迫切需求,以發展未來的抗旱能力。」
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※新北清潔公司,居家、辦公、裝潢細清專業服務
※別再煩惱如何寫文案,掌握八大原則!
※教你寫出一流的銷售文案?
※超省錢租車方案
摘錄自2019年10月16日自由時報報導
雪梨西部小鎮錫佛戴爾(Silverdale)居民10日發現一條大蟒蛇的蛻皮出現在鎮上,目擊的民眾立即通報當局,經研判後確認是一條成年巨蟒近期遺留下來的新皮,代表巨蛇有很大機率還藏身於鎮上。
新南威爾士州(NSW)政府隨後發布聲明,向居民描述他們當前面臨的潛在危機,當局除要求民眾一旦目擊應立即通報有關部門外,更警告切勿與蟒蛇有所接觸,以免發生危險。
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※新北清潔公司,居家、辦公、裝潢細清專業服務
※別再煩惱如何寫文案,掌握八大原則!
※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!
※超省錢租車方案
※教你寫出一流的銷售文案?
摘錄自2019年10月12日自由時報報導
綜合外媒報導,英國民眾每年估計使用50億支塑膠吸管、3億支塑膠攪拌棒及20億枝塑膠棉花棒,其中,塑膠棉花棒多數被沖進馬桶,藉下水道流入海洋,對海洋生態及野生動物造成難以估計的危害;英國原訂從2020年4月起全面禁止販售塑膠吸管、塑膠攪拌棒及塑膠棉花棒,而蘇格蘭議會率先在9月通過2018年提案的「全面禁止塑膠棉花棒生產與銷售」法案,目前此禁令已正式生效,成為英國宣布2020年4月起全面「禁塑」後,率先「全面禁止塑膠棉花棒」生產與銷售的區域。
過去25年間,蘇格蘭環保人士總共在當地海灘上「撿起」超過15萬根塑膠棉花棒,他們稱這是「海洋與野生動植物的勝利」,也期待蘇格蘭政府能採取更多措施,制止這場「塑膠潮」,也希望其他國家能跟進。
當地海洋保護協會的蓋梅爾(Catherine Gemmel)表示,這項禁令生效對「海洋和野生動植物」而言,是「前所未有」的勝利,期待蘇格蘭政府能繼續採取其他行動。
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※教你寫出一流的銷售文案?
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※回頭車貨運收費標準
※別再煩惱如何寫文案,掌握八大原則!
※超省錢租車方案
數位相機近年銷售逐漸下滑,眾品牌逐漸調整策略,大舉擁抱更輕巧的無反相機,也讓市占排名出現變化。《日經新聞》數據部門近期釋出 2019 年全球相機市占排行前五名,相較於去年出現不少變化。
第一名仍是業界龍頭 Canon,擁有接近一半的市占率,且對比 2018 年還增加了 2.4%,現在累積至 45.4%。說明即便面臨富士、Sony 在無反領域持續進攻,Canon 仍以自身步調推出新產品,今年亦發表 EOS R5、R6 以及一系列 RF 鏡頭,有望在專業領域搶下更多死忠用戶。
Sony 則在 2019 年首度超越 Nikon,隨著 A7 III 獲得熱烈好評,消費級別的 a6000 系列以及 RX100 也都有斬獲,市占率小幅增加至 20.2%,全年上升 0.9%。至於 Nikon 由於較晚踏入無反領域,面臨不少挑戰,2019 年市占率下滑 1.6%,整體落在 18.6%。外媒《PetaPixel》分析,隨著 Nikon 投入無反 Z 系列,今年應該能稍微止血。
排行第四、第五的分別是富士與 Panasonic,兩者市占率皆是 4.7%,前者全年下滑 0.4%,後者則是維持不動。至於近期遭到出售的 Olympus 在 2018 年原本是第五位,如今因銷售量下滑,被擠出前五名。
對於相機品牌來說,2019 年依舊不好過。數據亦顯示全年出貨數量僅 1483 萬台,下滑了 22%。今年碰上疫情更是雪上加霜,根據日本相機影像器材工業協會(CIPA)數據,上半年(1-6 月)數位相機總出貨量僅有 351 萬台,對比去年同期少了 51.9%,是 CIPA 於 2000 年開始公布數據以來,史上最低點的成績。
新聞來源:https://3c.ltn.com.tw/news/41345
【其他文章推薦】
※教你寫出一流的銷售文案?
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※回頭車貨運收費標準
※別再煩惱如何寫文案,掌握八大原則!
※超省錢租車方案
貝爾和平獎11日出爐,得獎者是衣索比亞總理阿邁德(Abiy Ahmed),原因是他結束該國與鄰國厄利垂亞之間長達20年的戰火,這項創舉又激發了非洲地區一系列的外交突破,阿邁德也提倡性別平等、環境保護。
阿邁德2018年4月上任,是該國第1位奧羅莫元首,在最初幾個月,他果斷、大膽地釋放政治犯,並對他們受到的酷刑予以譴責,也釋放被監禁的記者,甚至與政治反對派、民間社會對談,討論改革問題,並邀請先前流亡的政黨人士返國,還針對安全、司法部門進行重大改革。
阿邁德也致力於性別、環保問題,例如在國境內植樹造林以遏制氣候變化的負面影響。
本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※帶您來了解什麼是 USB CONNECTOR ?
※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面
※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!
※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※教你寫出一流的銷售文案 ?