4

я следующий маршрут конфигурация:Как сделать MVC принимать точки в параметрах?

routes.MapRoute(
      name: "Downloads", 
      url: "downloads/{filename}", 
      defaults: new { controller = "Downloads", action = "Index", filename = UrlParameter.Optional } 
     ); 

и следующий код контроллера:

public ActionResult Index(string filename) 
    { ... 

Когда я называю это действие, с http://test.com/downloads/test.txt я получаю 404. Когда я называю Действие без точек в имени файла он работает. Как я могу сделать MVC передать полные имена файлов в мое имя параметра?

+0

Проверить эту ссылку: http://stackoverflow.com/questions/11728846/dots-in-url -causes-404-with-asp-net-mvc-and-iis – Vinkal

+0

Спасибо! Не нашел этого сам по себе ... стыдно за меня;) – Norman

ответ

5

Это происходит, вероятно, потому, что если ваш URL содержит точку, IIs обрабатывает его как «физический путь» URL скорее переписать один.

Один аккуратный способ преодолеть это определить обработчик для вас собственной схеме, например:

<system.webServer>  
    <handlers>  
    <add name="ApiURIs-ISAPI-Integrated-4.0" 
     path="/downloads/*" 
     verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" 
     type="System.Web.Handlers.TransferRequestHandler" 
     preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
</system.webServer> 
0

Thanks @Coder. Я добавил следующий код (Dots in URL causes 404 with ASP.NET mvc and IIS) на мой web.config, и она работала:

<system.webServer> 
<handlers> 
    <add name="ApiURIs-ISAPI-Integrated-4.0" path="/downloads/*" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
</handlers> ... 
Смежные вопросы