2014-11-24 5 views
0

권한을 제어하기 위해 사용자 정의 AuthorizeAttribute이있는 ASP.NET MVC4 프로젝트가 있습니다. 내 상황을 더 쉽게 설명하기 위해이 문제를 설명하기 위해 거짓 프로젝트를 만들었습니다. 401 코드가 MVC 프로젝트에서 올바르게 처리되지 않았습니다.

나는 하나의 컨트롤러를 가지고

using System.Web.Mvc; 
using MvcApplication2.Helper; 
using MvcApplication2.Models; 

namespace MvcApplication2.Controllers 
{ 
    public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      var model = new ViewModel(); 

      return View(model); 
     } 

     [HttpPost] 
     public ActionResult Index(ViewModel model) 
     { 
      Session["ModelValue"] = model.InputValue; 

      return RedirectToAction("Step2"); 
     } 

     [MyAuthorize] 
     public ActionResult Step2() 
     { 
      return View(); 
     } 
    } 
} 

목적은 내가, 몇 가지 입력을 허용 세션에 값을 저장하고 Step2로 리디렉션 Index에서 매우 간단합니다. 세션 값이 1인지 아닌지 내가 2 단계 내 권한 부여 특성이 나의 속성에 대한 코드는 목적은 매우 간단합니다

using System; 
using System.Web; 
using System.Web.Mvc; 

namespace MvcApplication2.Helper 
{ 
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] 
    public class MyAuthorizeAttribute : AuthorizeAttribute 
    { 
     protected override bool AuthorizeCore(HttpContextBase httpContext) 
     { 
      if (httpContext.Session["ModelValue"] == null) 
      { 
       return false; 
      } 
      else 
      { 
       string inputValue = httpContext.Session["ModelValue"] as string; 

       if (inputValue != "1") 
       { 
        return false; 
       } 
       else 
       { 
        return true; 
       } 
      } 
     } 
    } 
} 

입니다 확인합니다.

응용 프로그램을 실행하고 텍스트 상자에 1을 입력하면 step2보기가 표시되고 다른 것을 입력하면 기본 401.0 페이지가 나타납니다.

지금 나는 응용 프로그램이 401 코드를 캡처 할 때, 나는 401.htm의 내용을 볼 희망

<system.web> 
    <customErrors mode="On" defaultRedirect="~/Error"> 
     <error statusCode="401" redirect="~/401.htm" /> 
    </customErrors> 

    <compilation debug="true" targetFramework="4.0" /> 

    </system.web> 

을 포함하도록 web.config 파일을 열었습니다. 그러나 실제로 서버에서 기본 401 오류 디스플레이가 표시됩니다.

왜 그런가?

+0

http://stackoverflow.com/questions/1679881/asp-net-mvc-user-friendly-401-error –

+0

나는, 이러한 구현을 많이 볼 수 있지만 나는 여전히 web.config 변경이 전혀 작동하지 않는 이유를 이해하려고 노력합니다. – hardywang

답변

1

또한이 사용

 <system.webServer> 
     <httpErrors> 
      <error statusCode="401" path="~/Home/Login"/> 
      <error statusCode="404" path="~/Error/NotFound"/> 
     </httpErrors> 
</system.webServer> 
+0

작동하지 않는 것 같습니다. ' <오류 상태 코드 = "401"경로 = "~/401.htm"/> ' 내 web.cofnig에서, 그리고 여전히 내 시스템 익스프레스 8.5에서 기본 시스템 401 페이지를 보여줍니다 – hardywang

+0

당신의 코드를 볼 수 없지만 httpErrors가 system.webServer 태그에 있는지 확인하는 것이 좋습니다. 또한 htm 페이지 대신 컨트롤러/조치 경로를 사용하는 것을 고려하면 remove 태그가 필요하지 않습니다. 작동하는지 알려주세요. – Nemmy

+0

이미'system.webServer'에'httpErrors'를 포함 시켰습니다. 아무런 차이가 없습니다. 구성 파일의 정적 파일 또는 MVC 컨트롤러/동작과 관련하여 유일한 차이점은로드 할 기능과 영향을주지 않아야한다는 것입니다. – hardywang