1

接続法 ASP.NET 2 MVCワーカーロールアプリケーションがあります。これは、デフォルトのテンプレートとそれほど変わりません。

HTTPからHTTPSへのリダイレクトを試みると(これは、通常のRequireSSL属性の実装によって保護されたコントローラーにアクセスするときに発生します)、「BadRequest」メッセージを含む空白のページが表示されます。

IntelliTraceはこれを示しています:

スロー:「ファイル'/Views/Home/LogOnUserControl.aspx'は存在しません。」(System.Web.HttpException)

コールスタックは本当に短いです:

[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にある通常のリファレンスです。

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

また、部分ビューLogOnUserControl.ashxはViews / Sharedにあります(ASPXではなくASCXです)。

SSLのために認証(FormsAuth)とリダイレクトを必要とするサイトページにアクセスしようとすると、問題が発生します。これらのページは、RequireSSL属性(リダイレクト== 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でコンパイルします。

誰かが何か考えを持っていますか、この奇妙な例外を引き起こす可能性のあるものとそれを取り除く方法はありますか?

4

2 に答える 2

0

注意: これは適切な解決策ではありませんが、今のところはうまくいきました。ホームコントローラー全体を RequireSsl でマークすることにより、すべての訪問者に最初から Https を使用するように強制します。

次のような呼び出しを行うと、エラーが発生する可能性があります。

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

しかし、サイトをナビゲートしてそのようなリンクにたどり着く可能性は低いので、当面はこれでうまくいきます。

于 2010-05-27T10:51:44.583 に答える
0

「LogOnUserControl」部分ビューが aspx/ascx ではなく ashx ファイルである特定の理由はありますか? 私は、MVC が規則として .aspx および .ascx ファイルのみを検索するという印象を受けています。

于 2010-05-27T11:01:03.047 に答える