需求:有些浏覽器會屏蔽帶有Ad字樣的路徑,此時需要建立多個路由指向同一個Action。
例如:原來 : http://lalalalalala.org:1506/api/advert/common 現在需要 增加另一個請求路徑 http://lalalalalala.org:1506/api/guanggao/common
1. .Net Core 中追加這樣的路徑比較簡單,如下

隻需要增加在Controller和Action增加Route特性标簽,便能得到下面四個路徑,然後他們指向的都是Get方法. 可以在swagger中檢視:
2. 在DotNet Freamwork項目下:
某個系統是webapi 1,不具有特性路由功能,是以不能像.net core 一樣通過加标簽的方式進行重命名。
方法可以參考下面的解決方式,我在注冊路由的地方,将需要進行增加路由的方法,都增加了一個配置。
在swagger中檢視的效果如下:
方法二,更新成webapi2,然後使用特性路由方式。
1.更新【webapi 1】到【WebApi 2】,如下更新到最新
其中 不更新 WebHost 會出現下面的異常
2.手動添加特性路由的配置代碼,如下圖,添加如下代碼到預設的路由上面: config.MapHttpAttributeRoutes();
* 這裡注意下,特性路由要在普通路由規則上面。
如果把特性路由放在預設路由的下面,編譯不會出錯,但是在運作時候就會出現找不到Action 的問題,如下圖:
{
"Message": "找不到與請求 URI“http://localhost:21094/api/Default2/Get?id=2”比對的 HTTP 資源。",
"MessageDetail": "未找到與名為“Default2”的控制器比對的類型。"
}
3.開始修改controller
通過 ~/api/xxx/yyy 可以重寫路由字首
補充 Webapi2 裡面跨域問題
在第二步更新了webapi之後,在前端請求的時候,會出現跨域問題。解決可以參考我下面的做法:
1.更新或者安裝nuget
然後在配置的地方添加如下代碼: config.EnableCors();
config.EnableCors() 裡面可以指定 跨域的Domain、Header以及Methond ,但是廣告系統原來在web.config進行了設定,是以這裡啟用一下就可以了。
啟動程式此時還是會出現一個問題:
目前端使用Ajax進行跨域請求的時候,會先試探性的發一個Option請求,然後得到對應的跨域資訊,如上面紅框中的配置。 當發現允許請求的時候,此時就進行下一步真實的請求。
問題在于這個Option請求傳回Code要是200,前端才認為是正常的。但是直接更新webapi之後,Option請求傳回是404 not found。 即使帶着這些配置的跨域資訊也不能被前端所處理。
是以在 每個請求的開始,增加一個判斷,将這個方法綁定到BeginRequest事件上。
然後跨域請求的第一次Option請求傳回都是200,并且帶着剛剛紅框中的資訊。
轉載于:https://www.cnblogs.com/dcz2015/p/11323876.html