ASP.Net MVC:HTTP错误414.请求URL太长

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

本文关键字:请求 URL 太长 错误 HTTP Net MVC ASP      更新时间:2023-09-26

我正在开发一个ASP.Net MVC应用程序。点击按钮,我正在调用JavaScript函数。

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。我应该在web.config设置maxUrl吗。我需要什么来修复这个错误?

这里确实没有足够的信息来正确诊断您的问题。然而,考虑到您正在向一个没有更改(并且远低于限制)的静态URL字符串提交POST(它不会添加到URL中),这很可能是由于需要授权而导致的重定向循环的结果。

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

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

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

要实现后者,您仍然必须包含Authorize属性,以便在请求中填充用户数据,但也应该添加AllowAnonymous。然后,在操作本身中,您可以检查用户是否真的是匿名的,并根据AJAX请求做出相应的响应。看起来您已经在尝试类似的东西,但如果没有AllowAnonymous,代码就永远不会被利用。