Jquery 身份验证错误疑难解答

Jquery 身份验证错误疑难解答,jquery,asp.net-mvc,authentication,Jquery,Asp.net Mvc,Authentication,症状: 一些用户无法成功发布,大多数用户可以成功发布。 发生错误时,用户将重定向到站点的共享/错误页面 使用的技术: IIS v6 Windows Server 2003 asp.net v3.5 asp.net mvc框架v1.0 jQuery linq sql server 2005 身份验证:使用AspNetActiveDirectory MembershipProvider的Windows 下面是web.config的一个片段: <authentication mode="Wind

症状:
一些用户无法成功发布,大多数用户可以成功发布。
发生错误时,用户将重定向到站点的共享/错误页面

使用的技术:
IIS v6
Windows Server 2003
asp.net v3.5
asp.net mvc框架v1.0
jQuery
linq
sql server 2005

身份验证:使用AspNetActiveDirectory MembershipProvider的Windows
下面是web.config的一个片段:

<authentication mode="Windows"/>
    <membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
    <providers>
            <add name="AspNetActiveDirectoryMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider,&#xA;                 System.Web, Version=2.0.3600.0, Culture=neutral,&#xA;                 PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ADConnString" connectionUsername="" connectionPassword=""/>
        </providers>
    </membership>
以下是控制器方法的一部分:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CurrentLineItems(FormCollection thisForm)
    // Get the forecast from the session
    BusinessLogic.ForecastBL thisForecast = (BusinessLogic.ForecastBL)HttpContext.Session["ForecastMetaData"];

        if (thisForecast != null)
        {
            // Run the save to db stuff here
            return View("CurrentLineItems", ViewData["LineItemSummary"]);
        }
        else
        {
            return Redirect("../Shared/Error");
        }
关于上述代码的一个注意事项……我非常确定,将forecast对象从会话中拉出不会导致错误,至少我假设这不是因为会话已过期,因为无法保存的用户在打开页面并立即尝试保存时无法保存

该类还具有以下属性:

[HandleError]
[Authorize]
public class ForecastController : Controller
{
在IIS属性中,该站点具有以下身份验证方法:
未选中启用匿名访问并选中集成Windows身份验证

以下是遇到此问题的用户的IIS日志:

466 2009-04-28 16:41:15 W3SVC1100645706 192.168.10.22 POST/Forecast/CurrentLineItems-443-XX.XX.XX.XX Mozilla/4.0+(兼容;+MSIE+7.0;+Windows+NT+5.1;+GTB5;+NET+CLR+1.1.4322)40110
467 2009-04-28 16:41:15 W3SVC1100645706 192.168.10.22 POST/Forecast/CurrentLineItems-443 DOMAIN\username XX.XX.XX.XX Mozilla/4.0+(兼容;+MSIE+7.0;+Windows+NT+5.1;+GTB5;+NET+CLR+1.1.4322)3020
468 2009-04-28 16:41:15 W3SVC1100645706 192.168.10.22获取/共享/错误-443-XX.XX.XX.XX Mozilla/4.0+(兼容;+MSIE+7.0;+Windows+NT+5.1;+GTB5;+NET+CLR+1.1.4322)40110
469 2009-04-28 16:41:16 W3SVC1100645706 192.168.10.22获取/共享/错误-443域\用户名XX.XX.XX.XX Mozilla/4.0+(兼容;+MSIE+7.0;+Windows+NT+5.1;+GTB5;+NET+CLR+1.1.4322)4040

为了更好的可读性,这里也删去了同样的几行:
2009-04-28 16:41:15发布/预测/当前行项目-443-XX.XX.XX.XX 40110
2009-04-28 16:41:15 POST/Forecast/CurrentLineItems-443 DOMAIN\username XX.XX.XX 302 2009-04-28 16:41:15 GET/Shared/Error-443-XX.XX.XX 401 10
2009-04-28 16:41:16获取/共享/错误-443域\用户名XX.XX.XX.XX 4040

我注意到所有的发帖请求都与上面的一样…除了成功发帖的人在第二次发帖时返回了200

那么,我如何确定是什么原因导致了上面的第一篇文章……没有域\用户名信息,却发送到web服务器并出现401错误的文章

还有为什么302错误

看起来我想要两个帖子…但我不太明白为什么浏览器会发送两个帖子请求?(当然……我怀疑我的代码,但不太明白为什么。)

任何有助于追踪上述错误的故障排除方法都将不胜感激


我现在看一下编辑…这对我的问题没有什么帮助

您返回的第一个401是NTLM身份验证方案的一部分,它是IIS处理windows身份验证的方式。发出请求后,它返回401,因此它再次尝试传递NTLM身份验证信息

因此,您的第一篇帖子进入,得到401,然后重试验证,得到302。这是重定向到错误页面的路径。然后你的错误页面得到401,再试一次得到404

所以您有两个问题,第一个是控制器中的某种类型的错误。可能是空检查重定向,也可能是另一个错误,您是否正在记录错误?另外,我会抛出一个异常,而不是重定向..然后你的handleError逻辑会启动并为你处理它


第二个问题是,您的错误页面似乎不存在,或者您的路由被打乱了。

将链接更改为输入按钮/元素似乎解决了这个问题……


由于“输入”按钮位于我要提交的表单中…它点击控制器后操作并保存数据,然后显示视图…

James,感谢您花时间回答。我似乎已经通过将上面的链接更改为带有提交类型的输入按钮解决了错误……再次感谢
[HandleError]
[Authorize]
public class ForecastController : Controller
{