2010-05-27 2 views
1

Subj. ASP.NET 2 MVC 작업자 역할 응용 프로그램이 있는데 기본 템플릿과 많이 다르지 않습니다.HTTP에서 HTTPS로 리디렉션 할 때 Windows Azure ASP.NET MVC 역할이 이상하게 작동합니다.

HTTP에서 HTTPS로 리디렉션하려고 할 때 (일반적인 RequireSSL 속성 구현으로 보안되는 constroller에 액세스 할 때 발생 함) "잘못된 요청"메시지가 표시된 빈 페이지가 표시됩니다. 슬로우

:

IntelliTrace이 표시됩니다. "파일 '/Views/Home/LogOnUserControl.aspx이'이 (가) 없습니다" (System.Web.HttpException)

콜 스택은 정말 짧은 :

<div id="logindisplay"> 
    <% Html.RenderPartial("LogOnUserControl"); %> 
</div> 

:

[External Code] 
App_Web_vfahw7gz.dll!ASP.views_shared_site_master.__Render__control1(System.Web.UI.HtmlTextWriter __w = {unknown}, System.Web.UI.Control parameterContainer = {unknown})  
[External Code] 
App_Web_bsbqxr44.dll!ASP.views_home_index_aspx.ProcessRequest(System.Web.HttpContext context = {unknown}) 
[External Code] 

사용자 컨트롤 참조가 일 /Views/Shared/Site.Master에서 보통이다 그리고 부분 뷰 LogOnUserControl.ashx는 Views/Shared (ASPX가 아닌 ASCX)에 있습니다.

사이트 페이지에 액세스하려고 할 때 SSL ()으로 인해 인증 (FormsAuth) 및 리디렉션이 필요한 문제가 발생합니다. 이 페이지는 RequireSSL 속성 (Redirect == true)으로 보호됩니다.

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = false)] 
public sealed class RequireSslAttribute : FilterAttribute, IAuthorizationFilter 
{ 
    public bool Redirect { get; set; } 

    // Methods 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
    // this get's messy, when we are running custom ports 
    // within the local dev fabric. 
    // hence we disable code in the debug 

#if !DEBUG 
    if (filterContext == null) 
    { 
     throw new ArgumentNullException("filterContext"); 
    } 

    if (filterContext.HttpContext.Request.IsSecureConnection) 
     return; 

    var canRedirect = string.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase); 

    if (canRedirect && Redirect) 
    { 
     var builder = new UriBuilder 
     { 
     Scheme = "https", 
     Host = filterContext.HttpContext.Request.Url.Host, 
     Path = filterContext.HttpContext.Request.RawUrl 
     }; 
     filterContext.Result = new RedirectResult(builder.ToString()); 
    } 
    else 
    { 
     throw new HttpException(0x193, "Access forbidden. The requested resource requires an SSL connection."); 
    } 
#endif 
    } 
} 

분명히이 경우 RELEASE로 컴파일합니다.

아무도 어떤 생각을 갖고 있습니까?이 이상한 예외가 생길 수 있으며이를 제거하는 방법은 무엇입니까?

답변

0

NB : 적절한 해결책은 아니지만 지금은 효과가 있습니다. 전체 가정용 컨트롤러에 RequireSsl을 표시하면 모든 방문자가 처음부터 Https를 사용해야합니다.

같은 호출하여 오류를 칠 여전히 가능 :

http://project.company.com/User/Login?ReturnUrl=/solution 

을하지만 사이트를 탐색하여 이러한 링크를 얻을 가능성이없는, 그래서 이것은 당분간 작동합니다.

0

"LogOnUserControl"부분보기가 aspx/ascx가 아닌 ashx 파일 인 특별한 이유가 있습니까? MVC는 .aspx 및 .ascx 파일 만 규칙으로 검색한다는 인상하에 있습니다.

+0

Mea culpa. 물론 부분 제어는 ASCX입니다. –

+0

@RinatAbdullin 답이 맞다면 다음과 같이 표시하십시오 :) – jamiebarrow

관련 문제