ASP.Net MVC: HTTP Error 414. The request URL is too long

时间:2015-12-14 18:13:54

标签: javascript jquery html ajax asp.net-mvc

I am developing an ASP.Net MVC application. On the button click, I am calling JavaScript function.

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();
     }

I get the error

HTTP Error 414. The request URL is too long.

I am getting an error on Ajax call in the javascript function. It looks like URL is not exceeding 2000 char limit. In web.config i am not having maxQueryStringLength.Should I need to set maxUrl in web.config. What do i need to fix this error?

1 个答案:

答案 0 :(得分:3)

这里真的不足以正确诊断您的问题。但是,假设您将POST(不添加到URL)提交到未更改的静态URL字符串(并且远低于限制),则很可能是由于需要而导致重定向循环的结果授权。

如果用户未登录,他们将被重定向到登录页面,但是,如果登录页面上的某些内容本身需要授权,则会再次将其重定向到登录页面,再次重定向等。每次重定向时,它都会附加一个returnUrl参数,指向导致重定向的URL。对于每个重定向周期,此参数越来越长,直到达到限制并引发异常。

如果用户未经授权,则重定向到的页面应允许匿名访问,并且该页面上呈现的任何内容(子操作)也应允许匿名访问。检查您的登录操作和相关视图,看看可能导致问题的原因。

另外,请记住,在使用MVC时,即使对返回JsonResult的操作的AJAX调用仍将重定向到应用程序的标准登录页面,这在上下文中显然是无用的。 AJAX请求。要解决此问题,您应该使用Web Api或不依赖Authorize属性。

要实现后者,您仍然必须包含Authorize属性才能在请求中填充用户数据,但您还应添加AllowAnonymous。然后,在操作本身,您可以检查用户是否实际上是匿名的,并相应地响应您的AJAX请求。看起来你已经尝试了类似的东西,但没有AllowAnonymous代码从未被使用过。