2015-12-14 81 views
1

我正在开发一个ASP.Net MVC应用程序。在按钮上单击,我打电话给JavaScript函数。ASP.Net MVC:HTTP错误414.请求URL太长

this.appDetails = function() { 

      editorModel.appModel.application.Name = $("#appTitleText").val(); 
      editorModel.appModel.application.Nicknames_c = $("#appNicknames").val(); 
      editorModel.appModel.application.Default_HMI__c = $("#AppModel_application_Default_HMI__c").val(); 
      editorModel.appModel.application.Description__c = $("#appOverviewText").val(); 

      $.ajax({ 
       type: 'POST', 
       url: '/Dashboard/Application/AppDetailsEdit', 
       data: { 'application': editorModel.appModel }, 

       success: function (events) { 

       }, 
       error: function (jqXHR, textStatus, errorThrown) { 
        alert(jqXHR.responseText); 
       } 
      }); 

     } 

Controller.cs

[Authorize] 
    [HttpPost] 
    public JsonResult AppDetailsEdit(EditAppModel application) 
    { 
     if (GetUserId() == Guid.Empty) 
     { 
      throw new UnauthorizedAccessException("Person Not Logged In"); 
     } 
     login(); 
    } 

我得到的错误

HTTP 414错误的请求URL太长。

我在javascript函数的Ajax调用中出现错误。它看起来像URL不超过2000个字符的限制。 在web.config中我没有maxQueryStringLength.Should需要在web.config中设置maxUrl。 我需要什么来解决这个错误?

+3

您是否打开过浏览器开发工具箱或像Fiddler这样的工具来查看实际的url? –

回答

3

这里确实不足以正确诊断您的问题。但是,鉴于您将POST(未添加到URL)提交给静态URL字符串,该静态URL字符串不会更改(并且远低于该限制),这很可能是由于需要重定向循环授权。

如果用户没有登录,他们将被重定向到登录页面,但是如果登录页面本身需要授权,它们将被重新定向到登录页面,该页面会再次被重定向,等等。每次重定向时,它都会附加一个returnUrl param,指向导致重定向的URL。对于每个重定向周期,该参数会变得越来越长,直到碰到限制并引发异常。

如果用户未被授权,用户被重定向到的页面应允许匿名访问,并且该页面上呈现的任何内容(子操作)也应允许匿名访问。检查您的登录操作和相关视图,以查看可能导致问题的原因。另外,请记住,使用MVC时,即使对返回JsonResult的操作的AJAX调用仍将重定向到应用程序的标准登录页面,这在AJAX请求的上下文中显然没有用处。为了解决这个问题,您应该使用Web Api或不要依赖Authorize属性。

要实现后者,您仍然必须包含Authorize属性以将用户数据填充到请求中,但是您还应该添加AllowAnonymous。然后,在动作本身中,您可以检查用户是否实际上是匿名的,并根据您的AJAX请求进行相应的响应。它看起来像你正在尝试这样的事情,但没有AllowAnonymous该代码从未被利用。

相关问题