Tom*_*son 33 c# url-routing asp.net-mvc-2
我有一个从主网站发回的一些JSON帖子中使用的URL:
HTTP://site/Services/api.svc/UpdateItem
我们正在慢慢更新网站到ASP.Net MVC 2,并且不想破坏系统中的任何当前URL.(JavaScript刷新问题)
我删除了/Services/api.svc并将此API调用的逻辑移动到以下Controller中:
HTTP://网站/ LegacyApi /的updateItem
不幸的是,在添加路由时,我似乎无法覆盖api.svc并继续收到404错误.
路线:
routes.MapRoute(
"UpdateItemApi",
"Services/api.svc/UpdateItem",
new { controller = "LegacyApi", action = "UpdateItem" }
);
Run Code Online (Sandbox Code Playgroud)
根据MSDN对这个具体问题,路由应该通过.
非常感谢任何帮助.
标准.aspx页面的路由按预期工作,因此这似乎与.svc文件及其处理方式有关.
Haa*_*ked 38
您遇到的问题是由于.svc文件注册的构建提供程序.此构建提供程序由默认的机器级web.config文件注册.
为了在这种情况下使路由工作,您需要在应用程序的web.config文件中删除构建提供程序.以下代码段显示了如何从构建提供程序列表中删除.svc扩展名.
<system.web>
<compilation debug="true" targetFramework="4.0">
<buildProviders>
<remove extension=".svc"/>
</buildProviders>
...
Run Code Online (Sandbox Code Playgroud)
使用 URL 重写,我能够执行此链接建议的操作,只是向后执行:
<system.webServer>
<rewrite>
<rules>
<rule name="LegacyApiService" stopProcessing="true">
<match url="^Services/api.svc/(.*)$" />
<action type="Rewrite" url="LegacyApi/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)