启用S​​SL后,自定义statusText未发送到客户端

时间:2017-10-11 14:58:01

标签: c# jquery asp.net-mvc-4 ssl https

我在ASP.NET MVC4 Web应用程序中启用SSL后发现了一种奇怪的行为。首先,这里有一点关于我正在尝试做什么的解释:如果模型验证失败,向服务器发送请求并显示错误消息。这是我用于此目的的Action-filter:

 public class ValidateModelAttribute : ActionFilterAttribute
  {
    public override void OnActionExecuting(ActionExecutingContext pFilterContext)
    {
      if (!pFilterContext.Controller.ViewData.ModelState.IsValid)
      {
        var msg = «Custom errormessage»
        pFilterContext.Result = new HttpStatusCodeResult(HttpStatusCode.BadRequest, msg);
      }
    }
  }

在客户端($ .ajax())上我只做这个:

alert(jqXhr.statusText);

这一切都完美无缺,直到我设置应用程序以支持SSL加密。这是奇怪的部分出现的地方。在我的本地工作机器而不是自定义错误消息上,我得到一个包含字符串(«error»)的警报,我假设它是jQuery库设置的默认文本。但是,如果将应用程序发布到远程Web服务器(在我的情况下是Windows Azure),我会获得自定义文本。 根据Chrome的控制台,当我在本地主机上运行应用程序时,我从服务器上得不到任何回复

jquery.js:8706 POST https://localhost:44300/my/url  400 ()

这就是远程服务器上的样子

jquery.js:8706 POST https://myurl.azurewebsites.net/my/url  400 (Custom errormessage)

这里有一些我用来设置HTTPS的配置代码。

在web.config中:

  <system.web>
    <httpCookies httpOnlyCookies="true" requireSSL="true"/>
    <authentication mode="Forms">
      <forms loginUrl="Account/Login" timeout="1440" slidingExpiration="true" requireSSL="true"></forms>
    </authentication>
  </system.web>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Strict-Transport-Security" value="max-age=16070400; includeSubDomains" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>

WebApiConfig.cs:

    public static void Register(HttpConfiguration pConfig)
    {
      pConfig.MessageHandlers.Add(new RequireHttpsHandler());
      //...
    }

RequireHttpsHandler.cs:

  public class RequireHttpsHandler : DelegatingHandler
  {
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage pRequest, CancellationToken pCancellationToken)
    {
      if (pRequest.RequestUri.Scheme != Uri.UriSchemeHttps)
      {
        return Task<HttpResponseMessage>.Factory.StartNew(() =>
          {
            var response = new HttpResponseMessage(HttpStatusCode.Forbidden)
            {
              Content = new StringContent("HTTPS required!")
            };
            return response;
          }, pCancellationToken);
      }
      return base.SendAsync(pRequest, pCancellationToken);
    }
  }
}

FilterConfig.cs

public static void RegisterGlobalFilters(GlobalFilterCollection pFilters)
{
  pFilters.Add(new RequireHttpsAttribute());
}  

有谁知道我的问题可能是什么来源以及如何解决?谷歌这次无法帮助我。

0 个答案:

没有答案