【问题标题】:ASP.Net MVC: HTTP Error 414. The request URL is too long [closed]ASP.Net MVC:HTTP 错误 414。请求 URL 太长 [关闭]
【发布时间】:2015-12-15 04:43:36
【问题描述】:

我正在开发一个 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。 我需要什么来修复这个错误?

【问题讨论】:

  • 您是否打开了浏览器的开发者工具箱或 Fiddler 之类的工具来查看实际的 url?

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


【解决方案1】:

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

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

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

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

要实现后者,您仍然必须包含Authorize 属性才能在请求中填充用户数据,但您还应该添加AllowAnonymous。然后,在操作本身中,您可以检查用户是否实际上是匿名的,并根据您的 AJAX 请求的目的做出相应的响应。看起来您已经在尝试类似的事情了,但是如果没有 AllowAnonymous,则永远不会使用该代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    相关资源
    最近更新 更多