5

Когда я отлаживаю/запускаю, используя IIS Express, и просматриваю http://localhost:1234/People, IIS Express пытается просмотреть каталог вместо выполнения маршрута People, и я получаю ошибка HTTP 403.14. Поэтому я отключил обработчик StaticFile в Web.config и обновил его. Теперь я получаю сообщение об ошибке на 404,4 HTTP:ASP.NET MVC5 отказывается сопоставлять маршрут, соответствующий физическому пути

404

Я знаю, что маршрут работает, потому что если я переименовать RoutePrefix, например, PeopleTest, тогда маршрут выполняется, и я получаю ответ, который я ожидаю.

Как я могу убедить IIS/Express предпочитать маршруты MVC через статические файлы/каталоги?

Я использую маршрутизацию атрибутов; соответствующий код ниже:

Web.config

<system.webServer> 
    <modules> 
     <remove name="FormsAuthentication" /> 
    </modules> 

    <handlers> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <remove name="OPTIONSVerbHandler" /> 
     <remove name="TRACEVerbHandler" /> 
     <remove name="StaticFile"/> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
</system.webServer> 

Global.asax

GlobalConfiguration.Configure(WebApiConfig.Register); 
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
BundleConfig.RegisterBundles(BundleTable.Bundles); 
AutofacConfig.Configure(); 

Startup \ 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<Person>))] 
     public IHttpActionResult Get() { ... } 
    } 
} 

Обратите внимание, что, поскольку я использую маршрутизацию атрибутов, я использую нестандартную структуру папок. Например. У меня нет папок Controllers/Models/Views, вместо этого у меня есть корневые папки для каждой бизнес-области (например, ~\People содержит контроллеры/модели/и т. Д. Для бизнес-области «Люди»).

Что я Пробовал

  1. Установка RAMMFAR.
  2. Снятие и повторное добавление ExtensionlessUrlHandler-Integrated-4.0.
+0

Я думаю, вы пытаетесь использовать это "Люди Структура" как [ Площадь] (http://www.c-sharpcorner.com/UploadFile/4b0136/getting-started-with-area-in-mvc-5/). Боюсь, эта структура, которую вы предложили, не будет работать. –

+0

Я не использую области или стандартную маршрутизацию MVC, я использую Маршрутизацию атрибутов: http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net -mvc-5.aspx –

ответ

5

Fixed путем добавления установки 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

Смежные вопросы