Когда я отлаживаю/запускаю, используя IIS Express, и просматриваю http://localhost:1234/People
, IIS Express пытается просмотреть каталог вместо выполнения маршрута People
, и я получаю ошибка HTTP 403.14. Поэтому я отключил обработчик StaticFile
в Web.config и обновил его. Теперь я получаю сообщение об ошибке на 404,4 HTTP:ASP.NET MVC5 отказывается сопоставлять маршрут, соответствующий физическому пути
Я знаю, что маршрут работает, потому что если я переименовать 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
содержит контроллеры/модели/и т. Д. Для бизнес-области «Люди»).
Что я Пробовал
- Установка RAMMFAR.
- Снятие и повторное добавление
ExtensionlessUrlHandler-Integrated-4.0
.
Я думаю, вы пытаетесь использовать это "Люди Структура" как [ Площадь] (http://www.c-sharpcorner.com/UploadFile/4b0136/getting-started-with-area-in-mvc-5/). Боюсь, эта структура, которую вы предложили, не будет работать. –
Я не использую области или стандартную маршрутизацию MVC, я использую Маршрутизацию атрибутов: http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net -mvc-5.aspx –