1

私はASP.NET MVC3でウェブサイトを使用して実行していWindows Server 2003ます。私はすべてのHTTPエラーを処理する方法を理解しようとしています。コードを実装しましたが、404エラーが返されたときにブラウザに403エラーが表示されることがあります。

これが私が実装した私のコードです:

私の中でglobal.asax.cs

protected void Application_Error(object sender, EventArgs e)
{
     MvcApplication app = (MvcApplication)sender;
     HttpContext context = app.Context;
     Exception exception = app.Server.GetLastError();
     context.Response.Clear();
     context.ClearError();
     HttpException httpException = exception as HttpException;

     RouteData routeData = new RouteData();
     routeData.Values["controller"] = "Error";
     routeData.Values["action"] = "Index";
     routeData.Values["httpException"] = httpException;

     Server.ClearError();

     IController errorController = new ErrorController();
     errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
}

ErrorController.csファイル:

public class ErrorController : Controller
{
     public ActionResult Index()
     {
          ErrorModel model = new ErrorModel();

          HttpException httpException = RouteData.Values["httpException"] as HttpException;
          int httpCode = (httpException == null) ? 500 : httpException.GetHttpCode();

          switch (httpCode)
          {
               case 403:
                    //Response.StatusCode = 403;
                    model.Heading = "Forbidden";
                    model.Message = "You aren't authorised to access this page.";
                    break;
               case 404:
                    //Response.StatusCode = 404;
                    model.Heading = "Page not found";
                    model.Message = "We couldn't find the page you requested.";
                    break;
               case 500:
               default:
                    Response.StatusCode = 500;
                    model.Heading = "Error";
                    model.Message = "Sorry, something went wrong.  It's been logged.";
                    break;
          }

          Response.TrySkipIisCustomErrors = true;

          return View(model);
     }
}

web.configに何も設定されていません。

app_codeユーザーがおよび同様のディレクトリなどの私のディレクトリにアクセスしようとしたときに、正しいエラーを表示したいと思います。これは可能ですか?

入力するhttp://localhost:43596/app_codeと、404エラーのように見えますが、IEのデフォルトの403エラーページが表示されます。コードで正しいHTTPエラーメッセージを表示するにはどうすればよいですか?

この方法が必要な理由は、ユーザーが何らかの方法でサイトを妨害しようとしている場合は、すべての試行をログに記録する必要があるためです。誰が間違ったアクセスをしているのかを知りたいのです。

4

2 に答える 2

1

入力するhttp://localhost:43596/app_codeと、404エラーのように見えますが、IEのデフォルトの403エラーページが表示されます。

403の何が問題になっていますか?

World Wide Webで使用されるHTTPでは、403 Forbiddenは、サーバーがアクセスを許可していないWebページまたはメディアをユーザーが要求したときにWebサーバーによって返されるHTTPステータスコードです。つまり、サーバーにアクセスできますが、サーバーはページへのアクセスを許可しませんでした。Microsoft IISは、ディレクトリリストが拒否された場合も同じように応答します。

ウィキペディア

ユーザーがフォルダーにアクセスしようApp_Dataとして404を返す場合、そのフォルダーはサーバーに存在しないことを意味しますが、実際にはフォルダーは存在する場合と存在しない場合があり、ASP.NETは特別なフォルダーであるため'誰もがそれにアクセスすることを許可し、それは禁止されているので、この場合、403を返すことは完全に有効だと思います。

ディレクトリインデックスがない場合の404と403

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

于 2012-06-02T12:22:21.737 に答える
0

web.config セクション "customErrors" set "mode=Off" を確認してみてください

<configuration>
 <system.web>
  <customErrors defaultRedirect="GenericError.htm" mode="RemoteOnly">
  <error statusCode="500" redirect="InternalError.htm"/>
</customErrors>

于 2012-06-02T13:19:38.937 に答える