2

我想我的MVC路由可能會有點麻煩。請注意,我使用ASP.NET MVC 4和Razor Views。ASP.NET MVC路由配置給Http 302對象移動到

我有我的註冊路線如下:

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

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

據說這是爲了顯示其具有_LayoutContent.cshtml的佈局PersonView.cshtml:

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執行如下而這又有一個_Layout.cshtml的佈局。

不幸的是,我無法看到的網頁....除非我參與的記錄下來。我不知道爲什麼有差別......

當我嘗試加載網頁時我沒有登錄,我發送到這個頁面:

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

當我看到什麼使用招發生,我可以看到,發生以下情況:

  1. 302,HTTP,mymachine上:8083 ,/ Person/Show/vXDwucay
  2. 200,HTTP,mymachine上: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以供在屏幕上顯示。

當我看到被稱爲動作,事實證明,我有(正確)放置在[授權]屬性就可以了...這就是爲什麼它沒有在未登錄時。

現在的我米不完全知道爲什麼錯誤不是更明顯......但我認爲我的網站上必須有一些東西埋在我的網站,做了重定向,這就是爲什麼我會被自動帶到?ReturnUrl =%2fPerson%2fShow%2fvXDwucay