首先運行的ASP.NET Web API 2,配置web.config
允許與特定文件擴展名的請求傳遞到MVC框架。
的問題是,IIS將處理.ab
文件作爲靜態文件和 默認會不會路由假設.ab
文件通過你的MVC應用程序 。 IIS處理該請求,並且您的MVC代碼永遠不會獲得路由到此文件的 機會。
總之,這裏的結構是什麼樣子,使.ab
文件的工作:
<system.webServer>
<handlers>
<!-- other handlers -->
<add name="ABHandler"
path="*.ab"
verb="GET" type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
<!-- other handlers -->
</handlers>
</system.webServer>
待辦事項注意到允許的謂詞的處理程序。根據服務需求進行相應更新。
接下來,如果像這些請求僅適用於一個控制器,則將路由映射到預期的控制器。
如果這些操作都屬於特定控制器,則可以應用基於約定的方法。
public static class WebApiConfig
public static void Register(HttpConfiguration config) {
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "SmallServiceApi",
routeTemplate: "api/SmallService/{action}.ab",
defaults: new { controller = "SmallService" }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
還有另一種通過屬性路由的方式。
[RoutePrefix("api/SmallService"]
public class SmallServiceController : ApiController {
//GET api/SmallService/GetCustomer.ab
[HttpGet]
[Route("GetCustomer.ab")]
public IHttpActionResult GetCustomer() { ... }
}
的缺點,這種方式,根據自己的喜好,是你必須標記所有在其各自的控制器的操作,如果有很多那麼這可能會變得非常重複。
謝謝!其實這很有趣。我發現另一種方法,將以下內容添加到web.config中,它似乎可以工作: –
很高興您能夠使用它。 !! – Nkosi
您應該將其添加爲您自己的問題的答案,以便具有類似問題的其他人可以從適用於您的解決方案中受益。 – Nkosi