Невозможно определить, почему URL-адрес не включает папку приложения в IIS - PullRequest
0 голосов
/ 06 октября 2011

Предположим, что приложение физически расположено по адресу:

C:\inetpub\wwwroot\MyApplication

. Оно было преобразовано в приложение через IIS 7.5, и теперь я могу получить доступ к приложению через ...

http://localhost/MyApplication 

... так как будет задействован маршрут по умолчанию.Если я позвоню ...

http://localhost/MyApplication/MyRequest

... будет задействован тот же маршрут, и будет получена нужная страница.Проблема заключается в том, что вышеупомянутый URL-адрес является формой, и при отправке этой формы я вызываю действие в том же Controller, но не маршрутизируется соответствующим образом.Полученный URL-адрес ...

http://localhost/MyRequest/MyMethod

против ...

http://localhost/MyApplication/MyRequest/MyMethod

Единственный маршрут в приложении: ...

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

Этопроблема маршрутизации?JS (jqueryUI и т. Д.), Который находится в папке «Сценарии», также не загружается, как будто все настроено для размещения на корневом уровне в иерархии, а добавление в папку MyApplication в IIS бросило вещи дляцикл.

ОБНОВЛЕНИЕ :

Определение формы выглядит как ...

<form class="..." action="/Request/Add" method="post" id="requestForm">

1 Ответ

3 голосов
/ 06 октября 2011

Бьюсь об заклад, у вас есть жестко закодированные URL в ваших представлениях и сценариях вместо использования помощников.

Например, касательно CSS, вместо того, чтобы жестко кодировать его так:

<link href="/Content/Site.css" rel="stylesheet" type="text/css" />

используйте url helpers:

<link href="<%= Url.Content("~/Content/Site.css") %>" rel="stylesheet" type="text/css" />

и относительно ваших HTML-форм и якорей всегда используйте HTML-помощник для их генерации:

<% using (Html.BeginForm()) { %>
    ...
<% } %> 

и относительно ваших файлов javascript абсолютно никогда не указывайте жестко такие URL-адреса, как это:

$.ajax({
    url: '/foo/bar',
    ...
});

При работе с URL-адресами в приложении ASP.NET MVC всегда следует полагаться на помощников по URL-адресам. Теперь, независимо от того, где размещено ваше приложение и как выглядят ваши маршруты, оно будет работать.


UPDATE:

А теперь, увидев ваше обновление, вместо жесткого кодирования ваших форм:

 <form class="..." action="/Request/Add" method="post" id="requestForm">

вы должны использовать html помощники для их генерации:

<% using (Html.BeginForm("Add", "Request", null, FormMethod.Post, new { id = "requestForm", @class = "foo" })) { %>
    ...
<% } %> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...