Как вывести страницу 404 по умолчанию в HandleUnauthorizedRequest - PullRequest
1 голос
/ 24 января 2011

Я написал пользовательский AuthorizeAttribute с переопределением HandleUnauthorizedRequest.Это переопределение условно устанавливает код состояния ответа на 404 с помощью:

var response = filterContext.HttpContext.Response;
response.StatusCode = 404;
response.ContentType = null;
response.End();

Проблема в том, что полный ответ:

HTTP/1.1 404 Not Found
Server: ASP.NET Development Server/10.0.0.0
Date: Mon, 24 Jan 2011 16:43:08 GMT
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 2.0
Cache-Control: private
Connection: Close
 

, когда я хочу отправить страницу по умолчанию 404,Что-то вроде:


Screenshot of the default ASP.NET 404 page


Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 24 января 2011

В итоге я установил свойство Result контекста фильтра следующим образом:

var response = filterContext.HttpContext.Response;
response.StatusCode = 404;
var viewData = new ViewDataDictionary();
viewData["Id"] = filterContext.HttpContext.Request.RequestContext.RouteData.Values["id"];
filterContext.Result = new ViewResult { ViewName = "NotFound", ViewData = viewData };
return;

где "NotFound" - это действие контроллера, содержащее другое действие, помеченное моим пользовательским AuthorizeAttribute.

0 голосов
/ 24 января 2011

Как насчет: Создайте пользовательский обработчик 404 в Web.config следующим образом:

<customErrors mode="On">
<error statusCode="404" redirect="My404ErrorPage.aspx" />
</customErrors>

Теперь все ошибки 404 переходят на My404ErrorPage.aspx (или как вы ни назовете страницу с ошибкой), и вы можететакже перенаправить на него по желанию.

Может быть "Response.WriteError(404);

...