Маршрутизация сходит с ума в приложении asp .net mvc 2, которое является тем же приложением, установленным 2 раза на одном сервере - PullRequest
1 голос
/ 26 августа 2010

Это будет звучать довольно странно.У меня есть одно приложение ASP .NET MVC 2.Работает отлично.Маршрутизация не очень сложная.Я запускаю это на Windows 2003 IIS 6, поэтому мне нужно использовать конфигурацию маршрутизации {controller} .aspx.

Во всяком случае, я дважды настраивал одно и то же приложение MVC 2 в разных виртуальных каталогах IIS.Это буквально копирование / вставка существующих файлов приложения в новый каталог.Имя виртуального каталога / приложения, конечно, различно для каждого.

Маршрутизация отлично работает в исходном приложении.Во-вторых, я не могу заставить страницу входа опубликовать действие входа в систему, не говоря уже об этом.

Самым сложным URL в моем приложении является что-то вроде:

http://server:90/appName/controller.aspx/AnAction?StartPeriod=2008

Мой global.asax.cs выглядит так:

        routes.IgnoreRoute("{resource}.html/{*pathInfo}");
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default",
            "{controller}.aspx/{action}/{id}",
            new { controller = "Account", action = "LogOn", id = UrlParameter.Optional }
          );

        routes.MapRoute(
          "Root",
          "",
          new { controller = "Account", action = "LogOn", id = "" }
        );

Приложение имеет только 2 контроллера: Account & Mpa.Опять же, один и тот же скомпилированный код существует в обоих местах на одном сервере IIS под разными именами приложений / виртуальными каталогами.Может кто-нибудь придумать причину, по которой я получу другое поведение в скопированном (не работает / не может найти представления / выбрасывает 404 практически для всего, кроме отображения страницы входа в систему контроллера учетных записей)?

EDIT 1

Еще одна вещь, о которой стоит упомянуть, это то, что я использую атрибуты ValidateAntiForgeryToken во всех методах post в контроллере Mpa.aspx.Это тот контроллер, который должен быть перенаправлен после публикации в Account.aspx (что, похоже, на самом деле не происходит).Я думал, что проблема заключалась в том, что значение соли, используемое для ValidateAntiForgeryToken, было одинаковым для обоих приложений, так как я копировал и вставлял.С тех пор я изменил значение для исходного приложения, но все равно получаю те же результаты.

FYI: Here are the details returned from firebug. 

    **GET Account.aspx**
    http://server:90/MpaDemo/Account.aspx 200 OK 2.9 KB 15ms

    ParamsHeadersPostPutResponseCacheHTML
    Response Headersview source
    Date    Thu, 26 Aug 2010 20:42:57 GMT
    Server  Microsoft-IIS/6.0
    X-Powered-By    ASP.NET
    X-AspNet-Version    2.0.50727
    X-AspNetMvc-Version 2.0
    Set-Cookie  ASP.NET_SessionId=z1q43ezg2hvtx255i5y5df21; path=/; HttpOnly
    Cache-Control   private
    Content-Type    text/html; charset=utf-8
    Content-Length  2921
    Request Headersview source
    Host    server:90
    User-Agent  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)
    Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language en-us,en;q=0.5
    Accept-Encoding gzip,deflate
    Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive  115
    Connection  keep-alive
    Authorization   NTLM TlRMTVNTUAADAAAAGAAYAHoAAAAYABgAkgAAAAoACgBIAAAADgAOAFIAAAAaABoAYAAAAAAAAACqAAAABYKIogUBKAoAAAAPdABtAGsAbgBiAGIAMAAwADUAagB4AGIATQBTAEoAQQBLAE0ATwBMADIANAAxADAAOADIJ4z3L+WAUAAAAAAAAAAAAAAAAAAAAABhigoN+1bIPZirxXzNQHWNIu/rx4Senq8=


    **Account.aspx POST**

    Date    Thu, 26 Aug 2010 20:44:26 GMT
    Server  Microsoft-IIS/6.0
    X-Powered-By    ASP.NET
    X-AspNet-Version    2.0.50727
    X-AspNetMvc-Version 2.0
    Location    /MpaDemo/Mpa.aspx/CustomErrorView?aspxerrorpath=/MpaDemo/Account.aspx
    Cache-Control   private
    Content-Type    text/html; charset=utf-8
    Content-Length  200
    Request Headersview source
    Host    SERVER:90
    User-Agent  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)
    Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language en-us,en;q=0.5
    Accept-Encoding gzip,deflate
    Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive  115
    Connection  keep-alive
    Referer http://SERVER:90/MpaDemo/Account.aspx
    Cookie  ASP.NET_SessionId=z1q43ezg2hvtx255i5y5df21

    **GET CustomErrorView**

    Response Headersview source
    Date    Thu, 26 Aug 2010 20:44:26 GMT
    Server  Microsoft-IIS/6.0
    X-Powered-By    ASP.NET
    X-AspNet-Version    2.0.50727
    Cache-Control   private
    Content-Type    text/html; charset=utf-8
    Content-Length  1534
    Request Headersview source
    Host    server:90
    User-Agent  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)
    Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language en-us,en;q=0.5
    Accept-Encoding gzip,deflate
    Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive  115
    Connection  keep-alive
    Referer http://server:90/MpaDemo/Account.aspx
    Cookie  ASP.NET_SessionId=z1q43ezg2hvtx255i5y5df21

Ответы [ 2 ]

0 голосов
/ 27 августа 2010

Хорошо, это раздражает. Я забыл проверить разрешения на папки, которые я скопировал. Очевидно, что попытка записи в журнал и невозможность выдать ошибку, которую обнаружил мой блок try / catch, но затем в перехвате я пытаюсь записать в журнал ошибку, которая вызвала другую, которую мой общий перехват всей страницы должен иметь поймал, но не сделал, потому что web.config имел его под другим контроллером.

вздыхает

Короче говоря, я удалил требование к контроллеру для страницы с общей ошибкой так:

Было: defaultRedirect="~/Mpa/CustomErrorView" Сейчас: defaultRedirect="~/CustomErrorView"

Вид страницы ошибки находится в общем каталоге папки Views.

Наконец, я добавил правильные разрешения для своей папки журналов.

Теперь все это работает.

Wow. Это заняло у меня 6 часов, чтобы понять. Я чувствую себя очень, очень хромым.

0 голосов
/ 27 августа 2010

Возможно, перейдите с IIS 6 на IIS Developer Express, который должен работать в 2003 году и поддерживать все новые функции MVC.

Цитата с сайта ScottGu:

• Работает в Windows XP и более поздних операционных системах - предоставляя вам полный набор функций разработчика IIS 7.x для всех платформ ОС

http://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx

http://blogs.iis.net/vaidyg/archive/2010/07/06/introducing-iis-developer-express.aspx

Скачать

...