여기 에서이 코드 소스를 사용하여 내 응용 프로그램에 자세한 오류 메시지가있는 사용자 지정 404를 표시하고 있습니다. 그러나 ActionSelector가 작동하지 않고 요청 에서 null 예외가 발생합니다.
public class HttpNotFoundAwareControllerActionSelector : ApiControllerActionSelector
{
public HttpNotFoundAwareControllerActionSelector()
{
}
public override HttpActionDescriptor SelectAction(HttpControllerContext controllerContext)
{
HttpActionDescriptor decriptor = null;
try
{
decriptor = base.SelectAction(controllerContext);
}
catch (HttpResponseException ex)
{
var code = ex.Response.StatusCode;
if (code != HttpStatusCode.NotFound && code != HttpStatusCode.MethodNotAllowed)
throw;
var routeData = controllerContext.RouteData;
routeData.Values["action"] = "Handle404";
IHttpController httpController = new ErrorController();
controllerContext.Controller = httpController;
controllerContext.ControllerDescriptor = new HttpControllerDescriptor(controllerContext.Configuration, "Error", httpController.GetType());
decriptor = base.SelectAction(controllerContext);
}
return decriptor;
}
}
이것은 내 HttpError 컨트롤러입니다.
public class ErrorController : ApiController
{
[HttpGet, HttpPost, HttpPut, HttpDelete, HttpHead, HttpOptions, AcceptVerbs("PATCH")]
public HttpResponseMessage Handle404()
{
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.NotFound, Logger.ConditionWarning("Invalid API Request - 404 Not Found"));
return response;
}
}
SelectAction이 컨트롤러에 요청을 전달하지 않는 것 같습니다. 도와주세요
편집 : 이것을 시도하십시오
public class ErrorController : ApiController
{
[HttpGet, HttpPost, HttpPut, HttpDelete, HttpHead, HttpOptions, AcceptVerbs("PATCH")]
public HttpResponseMessage Handle404()
{
HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.NotFound);
message.Content = new ObjectContent(typeof(HttpResponseMessage), Logger.ConditionWarning("Invalid API Request - 404 Not Found"), GlobalConfiguration.Configuration.Formatters.JsonFormatter);
return message
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다