.Net站點(diǎn)設(shè)置多個(gè)路由對(duì)應(yīng)同一個(gè)Action
需求:有些瀏覽器會(huì)屏蔽帶有Ad字樣的路徑,此時(shí)需要?jiǎng)?chuàng)建多個(gè)路由指向同一個(gè)Action。
例如:
原來(lái):http://lalalalalala.org:1506/api/advert/common 現(xiàn)在需要增加另一個(gè)請(qǐng)求路徑 http://lalalalalala.org:1506/api/guanggao/common
1、.Net Core中追加這樣的路徑比較簡(jiǎn)單,如下
只需要增加在Controller和Action增加Route特性標(biāo)簽,便能得到下面四個(gè)路徑,然后他們指向的都是Get方法. 可以在swagger中查看:
2. 在DotNet Freamwork項(xiàng)目下:
某個(gè)系統(tǒng)是webapi 1,不具有特性路由功能,所以不能像.net core 一樣通過(guò)加標(biāo)簽的方式進(jìn)行重命名。
方法一:可以參考下面的解決方式,我在注冊(cè)路由的地方,將需要進(jìn)行增加路由的方法,都增加了一個(gè)配置。
在swagger中查看的效果如下:
方法二:升級(jí)成webapi2,然后使用特性路由方式。
1.升級(jí)【webapi 1】到【W(wǎng)ebApi 2】,如下升級(jí)到最新
其中不升級(jí) WebHost 會(huì)出現(xiàn)下面的異常
2.手動(dòng)添加特性路由的配置代碼,如下圖,添加如下代碼到默認(rèn)的路由上面: config.MapHttpAttributeRoutes();
* 這里注意下,特性路由要在普通路由規(guī)則上面。
如果把特性路由放在默認(rèn)路由的下面,編譯不會(huì)出錯(cuò),但是在運(yùn)行時(shí)候就會(huì)出現(xiàn)找不到Action 的問(wèn)題,如下圖:
{
"Message": "找不到與請(qǐng)求 URI“http://localhost:21094/api/Default2/Get?id=2”匹配的 HTTP 資源。",
"MessageDetail": "未找到與名為“Default2”的控制器匹配的類(lèi)型。"
}
3.開(kāi)始修改controller
通過(guò) ~/api/xxx/yyy 可以重寫(xiě)路由前綴
補(bǔ)充:Webapi2 里面跨域問(wèn)題
在第二步升級(jí)了webapi之后,在前端請(qǐng)求的時(shí)候,會(huì)出現(xiàn)跨域問(wèn)題。解決可以參考我下面的做法:
1.升級(jí)或者安裝nuget
然后在配置的地方添加如下代碼: config.EnableCors();
config.EnableCors() 里面可以指定 跨域的Domain、Header以及Methond ,但是廣告系統(tǒng)原來(lái)在web.config進(jìn)行了設(shè)置,所以這里啟用一下就可以了。
啟動(dòng)程序此時(shí)還是會(huì)出現(xiàn)一個(gè)問(wèn)題:
當(dāng)前端使用Ajax進(jìn)行跨域請(qǐng)求的時(shí)候,會(huì)先試探性的發(fā)一個(gè)Option請(qǐng)求,然后得到對(duì)應(yīng)的跨域信息,如上面紅框中的配置。 當(dāng)發(fā)現(xiàn)允許請(qǐng)求的時(shí)候,此時(shí)就進(jìn)行下一步真實(shí)的請(qǐng)求。
問(wèn)題在于這個(gè)Option請(qǐng)求返回Code要是200,前端才認(rèn)為是正常的。但是直接升級(jí)webapi之后,Option請(qǐng)求返回是404 not found。 即使帶著這些配置的跨域信息也不能被前端所處理。
所以在 每個(gè)請(qǐng)求的開(kāi)始,增加一個(gè)判斷,將這個(gè)方法綁定到BeginRequest事件上。
然后跨域請(qǐng)求的第一次Option請(qǐng)求返回都是200,并且?guī)е鴦倓偧t框中的信息。
到此這篇關(guān)于.Net站點(diǎn)設(shè)置多個(gè)路由對(duì)應(yīng)同一個(gè)Action的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ASP.NET中的Inherits、CodeFile、CodeBehind的區(qū)別詳解
這篇文章主要介紹了ASP.NET中的Inherits、CodeFile、CodeBehind的區(qū)別詳解,需要的朋友可以參考下2014-07-07在.NET Core類(lèi)庫(kù)中使用EF Core遷移數(shù)據(jù)庫(kù)到SQL Server的方法
下面小編就為大家分享一篇在.NET Core類(lèi)庫(kù)中使用EF Core遷移數(shù)據(jù)庫(kù)到SQL Server的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12asp.net 使用Response.Filter 過(guò)濾非法詞匯
一般信息發(fā)布網(wǎng)站,論壇等均具有實(shí)現(xiàn)非法詞匯過(guò)濾功能,即當(dāng)用戶(hù)錄入非法詞匯時(shí),進(jìn)行替換,使其無(wú)法顯示到頁(yè)面上,針對(duì)此種功能,通常采用的時(shí),在讀取時(shí),在讀到非法詞匯后,進(jìn)行替換。2010-03-03ASP.NETCore6開(kāi)啟文件服務(wù)允許通過(guò)url訪(fǎng)問(wèn)附件的操作方法
最近在做一個(gè)工作臺(tái)的文件上傳下載功能,主要想實(shí)現(xiàn)上傳圖片之后,可以通過(guò)url直接訪(fǎng)問(wèn),由于url直接訪(fǎng)問(wèn)文件不安全,所以需要手動(dòng)開(kāi)啟文件服務(wù),這篇文章主要介紹了ASP.NETCore6開(kāi)啟文件服務(wù)允許通過(guò)url訪(fǎng)問(wèn)附件,需要的朋友可以參考下2023-11-11在Framework4.0中實(shí)現(xiàn)延遲加載的實(shí)現(xiàn)方法
延遲加載,亦稱(chēng)延遲實(shí)例化,延遲初始化等,主要表達(dá)的思想是,把對(duì)象的創(chuàng)建將會(huì)延遲到使用時(shí)創(chuàng)建,而不是在對(duì)象實(shí)例化時(shí)創(chuàng)建對(duì)象,即用時(shí)才加載。2011-08-08asp.net mvc4 mysql制作簡(jiǎn)單分頁(yè)組件(部分視圖)
這篇文章主要介紹了asp.net mvc4 mysql制作簡(jiǎn)單分頁(yè)組件,附部分視圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10.Net Core+Angular Cli/Angular4開(kāi)發(fā)環(huán)境搭建教程
這篇文章主要為大家詳細(xì)介紹了.Net Core+Angular Cli/Angular4開(kāi)發(fā)環(huán)境搭建教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06.net通過(guò)Action進(jìn)行Options參數(shù)的傳遞的方法
在.NET Core中,使用Action和Options參數(shù)方式配置服務(wù)并將配置信息對(duì)象注冊(cè)到IServiceCollection的好處在于,它提供了更高級(jí)別的可配置性和可擴(kuò)展性,這篇文章主要介紹了.net通過(guò)Action進(jìn)行Options參數(shù)的傳遞,你知道是怎么實(shí)現(xiàn)的嗎,需要的朋友可以參考下2023-12-12asp.net 讀取并修改config文件實(shí)現(xiàn)代碼
讀取并修改 config 文件的asp.net代碼,方便我們用asp.net修改配置文件。2009-11-11