2

Я думаю, что у меня могут быть проблемы с моей маршрутизацией MVC. Заметьте, я использую ASP.NET MVC 4 с Razor Views.Конфигурация маршрутизации ASP.NET MVC, предоставляющая объект Http 302, перенесенный в

У меня есть мои маршруты зарегистрированы следующим образом:

routes.MapRoute(
     "Person", 
     "Person/Show/{uniqueId}", 
     new { controller = "Person", action = "Show", uniqueId = "" } 
     ); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional} 
     ); 

Мой PersonController реализуется следующим образом:

[HandleError] 
public class PersonController{ 
    public ActionResult Show(string uniqueId) 
    { 
     //get data from database 
     var personData = GetPersonDataFromDatabase(uniqueId); 

     return View("PersonView", new PersonViewModel(personData));  
    } 
} 

Это должно отображать PersonView.cshtml, который имеет расположение _LayoutContent.cshtml который, в свою очередь, имеет макет _Layout.cshtml.

К сожалению, я не могу увидеть страницу .... если я не вошли. И я понятия не имею, почему это делает разницу ...

При попытке загрузить страницу, если Я не авторизованы Я послан на эту страницу:

http://mymachine:8083/?ReturnUrl=%2fPerson%2fShow%2fvXDwucay 

Когда я смотрю на то, что происходит с помощью Fiddler я могу видеть, что происходит следующее:

  1. 302, HTTP, MyMachine: 8083 ,/Person/Show/vXDwucay
  2. 200, HTTP, моя_машина: 8038,/ReturnUrl =% 2fPerson% 2fShow% 2fvXDwucay

Для HTTP 302, я могу видеть, что она возвращается следующее:

<html><head><title>Object moved</title></head><body> 
<h2>Object moved to <a href="/?ReturnUrl=%2fPerson%2fShow%2fvXDwucay">here</a>.</h2> 
</body></html> 

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

ответ

3

Наконец-то я нашел решение своей проблемы. Я смог отследить свою проблему до конкретной ревизии ... и после того, как многие уставились на код, наконец, смогли прозрение о решении.

Я отправляю решение здесь, на случай, если кто-то еще столкнется с этой проблемой в будущем.

В «PersonView» Я показывал частичный вид, что возвращавшегося некоторые данные следующим образом:

@Html.Action("SomeListPartial", "Other") 

Когда я читал, что, на мой взгляд, я ошибочно думал, что это @ Html.ActionLink метод, который просто предоставляет гиперссылку на страницу ...... вместо этого метод @ Html.Action «Вызывает указанный метод дочернего действия с использованием указанного имени контроллера и возвращает результаты в виде строки HTML». ... что означает, что он выполняет действие и возвращает полученный html для отображения на экране.

Когда я смотрел на действия будет вызван, то получается, что у меня был (правильно) разместило [Авторизованный] атрибут на нем ... именно поэтому он неудачу, когда не вошли в систему.

Теперь я m не совсем уверен, почему ошибка не была более заметной ... но я думаю, что на моем веб-сайте должно быть что-то, что делает перенаправление, поэтому я автоматически принимаю его? ReturnUrl =% 2fPerson% 2fShow% 2fvXDwucay