[英]WCF + MVC + WebAPI handlers and routing
我最近將Visual Studio升級到了2013,現在默認情況下現在僅使用IIS Express(而不是Cassini),發現我無法再擊中WCF服務的javascript端點:Myservice.svc / js或/ jsdebug,但是直接擊中.svc即可精細。
我發現如果刪除web.config的<handlers>部分(其中包括一些ExtensionlessUrlHandler項),則會恢復腳本端點的功能。 我很好奇,刪除以下項目會有什么影響,以及是否有替代解決方案。
這是我從Web.config中刪除的塊:
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
在某些情況下,我在一個項目中都使用.NET 4.5,MVC 5.1,WebAPI v2.1和WCF。 本質上是所有組件的最新版本。
更新1:我還注意到,刪除了這些處理程序的所有WebAPI PUT都以404的形式返回。 因此顯然缺少某些東西。 另一個較小的隱喻是,當部署到實時服務器(IIS 7.5 [版本7.5.7600.16385])時,一切正常。 因此,Visual Studio 2013集成版IIS Express和完整的IIS 7.5安裝程序的路由或處理程序映射之間必須有所不同。
另外,如果我創建一個全新的ASP.NET Web應用程序並添加WCF服務,則在本地一切正常。 如果隨后添加WebAPI控制器,則下面的處理程序部分將添加到web.config中,並中斷所有WCF調用。 當MVC,WCF和WebAPI都屬於一個應用程序時,這聽起來更像是Microsoft默認配置中的“錯誤”。
更新2:這是一個基本的測試用例,任何人都可以遵循以重現我遇到的錯誤。
重新創建基本問題的過程: (WebAPI運行,WCF * .svc / js生成404)
部分修復: (WebAPI PUT損壞,WCF可以呈現JS請求)
這實際上是一個mvc路由問題。 請按如下所示修改〜/ App_Start / RouteConfig.cs。 您需要保留ExtensionlessUrlHandler才能使mvc路由在無擴展名的url上正常運行。
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//This line is the addition.
routes.IgnoreRoute("{resource}.svc/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.