当我使用IIS Express调试/运行并浏览到时http://localhost:1234/People
,IIS Express尝试浏览People
目录而不是执行People
路由,我收到403.14 HTTP错误.所以我StaticFile
在Web.config中禁用了处理程序并刷新了.现在我收到404.4 HTTP错误:
我知道路由有效,因为如果我重命名RoutePrefix
,例如PeopleTest
,那么路由被执行,我得到了我期望的响应.
如何说服IIS/Express更喜欢MVC路由而不是静态文件/目录?
我正在使用属性路由; 相关代码如下:
Web.config文件
Global.asax中
GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); BundleConfig.RegisterBundles(BundleTable.Bundles); AutofacConfig.Configure();
启动\ WebApiConfig
namespace MyApi.Startup { public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.MapHttpAttributeRoutes(); } } }
人们\把PeopleController
namespace MyApi.People { [RoutePrefix("People")] public partial class PagesController : BaseController { [Route] [HttpGet] [ResponseType(typeof(IEnumerable))] public IHttpActionResult Get() { ... } } }
请注意,由于我使用的是属性路由,因此我使用的是非标准文件夹结构.例如,我没有Controllers/Models/Views文件夹,而是每个业务区域都有根文件夹(例如,~\People
包含"People"业务区域的控制器/模型/等).
我试过的
设置RAMMFAR.
删除并重新添加ExtensionlessUrlHandler-Integrated-4.0
.
Josh M... 5
通过添加设置修复RouteExistingFiles = true
:
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.RouteExistingFiles = true; routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); } }
因此ASP.NET路由将处理所有路由:https://msdn.microsoft.com/en-us/library/system.web.routing.routecollection.routeexistingfiles(v = vs.110).aspx
通过添加设置修复RouteExistingFiles = true
:
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.RouteExistingFiles = true; routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); } }
因此ASP.NET路由将处理所有路由:https://msdn.microsoft.com/en-us/library/system.web.routing.routecollection.routeexistingfiles(v = vs.110).aspx