2014-03-25 56 views
6

我使用的是asp.net MVC4 + visual studio 2012.每一件事情都很好,但只有自定義錯誤始終在URL上有aspxerrorpath param。使用ResponseErrors刪除aspxerrorpath param使用ResponseRewrite

我已經配置在web.config中自定義錯誤:

<customErrors mode="On" defaultRedirect="~/Error/Error"> 
    <error redirect="~/Error/Error" statusCode="404" /> 
    <error redirect="~/Error/Error" statusCode="500" /> 
</customErrors> 

我也改變了我的錯誤行動:

public ActionResult Error() 
{ 
    Response.Status = "404 Not Found"; 
    Response.StatusCode = 404; 
    return View(); 
} 

現在時,有一些404發生。我總是在我的URL上獲得aspxerrorpath param。 我嘗試添加redirectMode="ResponseRewrite"到customError節點,但如果添加此,該錯誤會顯示一個運行時異常.....

那麼,有沒有刪除aspxerrorpath PARAM任何最好的方法?謝謝。

+0

@AmirHossein Mehrvarzi看起來你沒有看到我的問題,我說我已經試過解決方案:redirectMode =「ResponseRewrite」,但它不工作。 – qakmak

+0

@AmirHossein Mehrvarzi這些問題已經完成,但沒有任何人可以解決我的問題。 – qakmak

+0

@AmirHosseinMehrvarzi,我用另一種方式修復它,你需要刪除已經有答案的鏈接。 – qakmak

回答

0

我有同樣的問題從我的IIS服務器設置aspx錯誤路徑。所以檢查你的IIS設置:

your project > Authentication > Forms Authentic 

在形式認證右鍵單擊編輯並檢查您的網址。

我在那個url路徑中刪除擴展名爲.aspx的問題,它工作正常。

+0

嗨,我沒有在我的項目中使用任何身份驗證。我正在使用IIS7.5。我使用MVC4。不使用.aspx查看頁面 – qakmak

+0

@qakmak我正在使用iis7的MVC4剃鬚刀語法。但它會在我的默認頁面結束時自動添加.aspx。 – Jaimin

+0

不是我的,我是alredy從Global.asax中刪除aspx視圖引擎use:ViewEngines.Engines.Clear();.我的錯誤URL如下所示:http://127.0.0.1/Error/Error?aspxerrorpath = / – qakmak

0

在您的mvc動作中使用重定向。

例如在配置中你可以有〜/錯誤,在控制器有索引動作(默認動作),重定向到錯誤操作(我會稱之爲PageNotFound) - 查詢字符串將在重定向時丟失。

0

最後我關閉的customErrors

<customErrors mode="Off"></customErrors> 

然後我用httpErrors來取代它。

<httpErrors errorMode="Custom" existingResponse="Replace"> 
     <remove statusCode="400"/> 
     <error statusCode="400" responseMode="ExecuteURL" path="/Error/BadRequest"/> 
     <remove statusCode="403"/> 
     <error statusCode="403" responseMode="ExecuteURL" path="/Error/AccessDenied" /> 
      <remove statusCode="404"/> 
     <error statusCode="404" responseMode="ExecuteURL" path="/Error/NotFound" /> 
     <remove statusCode="500"/> 
     <error statusCode="500" responseMode="ExecuteURL" path="/Error/Error" /> 
</httpErrors> 

現在一切都好。

更新1

但它會顯示異常細節有時,所以現在我使用:

<customErrors mode="RemoteOnly" defaultRedirect="~/Main/Error" redirectMode="ResponseRewrite"> 
     <error redirect="~/Main/NotFound" statusCode="404" /> 
     <error redirect="~/Main/Error" statusCode="500" /> 
     <error redirect="~/Main/AccessDenied" statusCode="403" /> 
     <error redirect="~/Main/BadRequest" statusCode="400" /> 
    </customErrors> 


<httpErrors errorMode="Custom" existingResponse="Replace"> 
     <remove statusCode="400" /> 
     <error statusCode="400" responseMode="ExecuteURL" path="/Main/BadRequest" /> 
     <remove statusCode="403" /> 
     <error statusCode="403" responseMode="ExecuteURL" path="/Main/AccessDenied" /> 
     <remove statusCode="404" /> 
     <error statusCode="404" responseMode="ExecuteURL" path="/Main/NotFound" /> 
     <remove statusCode="500" /> 
     <error statusCode="500" responseMode="ExecuteURL" path="/Main/Error" /> 
    </httpErrors> 

我認爲還沒有找到最佳的解決方案現在。也不明白爲什麼微軟這樣設計。也許想每個人都知道基於的網站.NET

4

另一個簡單的解決方案是添加到網絡。配置文件

<customErrors mode="On"> 
    <error statusCode="404" redirect="~/home/notfound" /> 
</customErrors> 

和家庭控制器:

public ActionResult NotFound(string aspxerrorpath) 
{ 
    if (!string.IsNullOrWhiteSpace(aspxerrorpath)) 
     return RedirectToAction("NotFound"); 

    return View(); 
} 
1

<system.web>...</system.web>

<customErrors mode="On" defaultRedirect="~/" redirectMode="ResponseRedirect" /> 

,比我的默認行爲的(在默認控制器),在第一行我寫下如下:

if (Request["aspxerrorpath"] != null) return RedirectToAction(this.ControllerContext.RouteData.Values["action"].ToString()); 

這是骯髒的決心,但有效。