2014-03-25 9 views
6

Ich benutze asp.net MVC4 + Visual Studio 2012. alles, alles in Ordnung, aber nur die benutzerdefinierte Fehler hat immer die aspxerrorpath param auf der URL.Entfernen Sie den aspxerrorpath Parameter mit CustomErrors verwenden Sie ResponseRewrite

Config ich bereits den benutzerdefinierten Fehler auf web.config:

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

Ich änderte meine Fehler auch Aktion:

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

jetzt, wenn es einige 404 passiert ist. Ich habe immer aspxerrorpath param auf meiner URL. versuchte ich redirectMode="ResponseRewrite" den Custom Knoten hinzuzufügen, aber wenn diese hinzufügen, wird der Fehler eine Laufzeitausnahme angezeigt werden .....

Gibt es also jede beste Weg, um die aspxerrorpath param entfernen? Vielen Dank.

+0

@AmirHossein Mehrvarzi Sieht aus, als ob Sie meine Frage nicht sehen, ich sagte, ich habe bereits versucht, Lösung: redirectMode = "ResponseRewrite", aber es funktioniert nicht. – qakmak

+0

@AmirHossein Mehrvarzi diese Probleme bereits zu Ende, aber niemand kann mein Problem behoben. – qakmak

+0

@AmirHosseinMehrvarzi, ich reparierte es auf eine andere Weise, Sie müssen den '' Already answer'' Link entfernen. – qakmak

Antwort

0

Ich habe dasselbe Problem, der aspx Fehlerpfad wird von meinem IIS-Server festgelegt. so überprüfen Sie die IIS-Einstellungen:

your project > Authentication > Forms Authentic 

In Form Authentifizierung direkt bearbeiten klicken und Ihre URL überprüfen.

Ich habe Problem in diesem URL-Pfad entfernen Sie die Erweiterung .aspx und es funktioniert gut.

+0

Hallo, ich benutze keine Authentifizierung in meinem Projekt. und ich benutze IIS7.5 damit. Ich benutze MVC4. nicht verwenden. aspx view page – qakmak

+0

@qakmak ich benutze MVC4 Rasierersyntax mit iis7. aber es fügt automatisch ASPX am Ende meiner Standardseite hinzu. – Jaimin

+0

Nicht meins, ich bin bereits entfernen ASPX-View-Engine von Global.asax verwenden: ViewEngines.Engines.Clear() ;. Meine Fehler-URL gefällt mir: http: //127.0.0.1/Error/Error? aspxerrorpath = / – qakmak

0

Verwenden Sie Redirect innerhalb Ihrer MVC-Aktion. Zum Beispiel in config können Sie "~/Fehler" haben, im Controller haben Sie eine Indexaktion (Standardaktion), die zur Fehleraktion umleitet (ich würde es PageNotFound nennen) - Querystring wird beim Umleiten verloren gehen.

0

Schließlich schließe ich die Custom

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

Dann benutze ich httperrors es zu ersetzen.

<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> 

Jetzt alles in Ordnung.

aktualisieren 1

Aber es wird die Ausnahmedetails anzeigen Also manchmal, jetzt benutze ich:

<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> 

Ich denke immer noch nicht beste Lösung für jetzt finden. verstehe auch nicht, warum das Microsoft-Design so ist. Vielleicht möchte jeder die Website basierend auf wissen. NET

4

Eine weitere einfache Lösung ist im Internet hinzufügen.config-Datei

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

und in der Heimsteuerung:

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

    return View(); 
} 
1

Ich schrieb

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

in <system.web>...</system.web>, als in meiner Standard-Aktion ist (in den Standard-Controller), in der ersten Zeile I schrieb folgendes:

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

Es ist schmutzige Entschlossenheit, aber effektiv.