Приложение MVC3 на IIS7.5 с маршрутом к файлу x.jpg не работает - PullRequest
1 голос
/ 21 октября 2011

Когда мое чистое, только что созданное новое приложение (интегрированное .net 4.0) находится на Visual Studio Web Server, все работает нормально. Ссылка, подобная приведенной ниже, работает нормально, и контроллер возвращает изображение.

http://localhost:12345/image/a.jpg

Но когда я запускаю это приложение на IIS 7.5, iis берет на себя управление и сообщает 404.

http://localhost/testmvc3/image/a.jpg

Контроллер:

public class ImageController : Controller
{
    public ActionResult Index(string name)
    {
        var dir = Server.MapPath("~/content/" + name);
        return File(dir, "image/jpg");
    }
}

Маршруты:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Image", // Route name
        "image/{*name}", // URL with parameters
        new { controller = "Image", action = "Index", name = UrlParameter.Optional } // Parameter defaults
    );

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
}

Что мне следует изменить, чтобы правильно запустить это приложение?

EDIT1:
Проблема с расширением. Когда я удаляю расширение, то запрашивает точки к контроллеру изображения. С расширением (jpg) iis сначала получает запрос (почему !?) и возвращает 404 (без касания действия контроллера изображения).

EDIT2:

  • IIS 7.5 в Windows 7 64-битная
  • Приложение на интегрированном конвейере Framework 4.0

web.config до моих изменений:

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

Ответы [ 4 ]

1 голос
/ 21 октября 2011

Я нашел это.Uchh .....

Я изменяю путь ExtensionlessUrlHandler со значения по умолчанию '*. ' на '*':

<handlers>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <add
        name="ExtensionlessUrlHandler-Integrated-4.0"
        path="*"
        verb="GET,HEAD,POST,DEBUG"
        type="System.Web.Handlers.TransferRequestHandler"
        resourceType="Unspecified"
        requireAccess="Script"
        preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

Теперь всезапросы проходят через механизм маршрутизации.

Затем я добавляю IgnoreRoute в ' content / {* all} ', где у меня есть все файлы статического содержимого.

0 голосов
/ 22 октября 2011

от вас не требуется этого делать. Убедитесь, что ваш пул приложений работает в режиме интегрированного конвейера.

0 голосов
/ 21 октября 2011

В Свойствах вашего проекта на вкладке Интернет в разделе под переключателем Use Local IIS Web Server в поле для URL-адреса проекта измените запись на http://localhost:12345.

Затем в IIS измените привязку http для сайта localhost и измените его на 12345.

0 голосов
/ 21 октября 2011

Если решение развернуто, то есть не только сопоставлено с вашим решением, но и развернуто, как и должно быть, результат Server.MapPath будет не таким, как вы ожидаете. В папке Server.MapPath «по умолчанию» находится фактическая DLL.

Один из способов решить эту проблему - установить для параметра «Копировать в выходной каталог» для ваших изображений значение «Копировать alwats» или «Копировать, если новее».

Возможно, вы могли бы использовать что-то вроде Server.MapPath("~/content" + name);, но я сделаю так, что ваше решение не найдет изображения.

...