症状:
某些用户无法成功进行POST,大多数可以成功POST。
发生错误时,用户将被重定向到该站点的共享/错误页面。使用疑难解答身份验证错误
技术:
IIS V6
Windows Server 2003的
asp.net V3.5
asp.net mvc框架V1.0
jQuery的
LINQ
SQL Server 2005中
认证:Windows与AspNetActiveDirectoryMembershipProvider
这是web.config的一个片段:
<authentication mode="Windows"/>
<membership defaultProvider="AspNetActiveDirectoryMembershipProvider">
<providers>
<add name="AspNetActiveDirectoryMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider,
 System.Web, Version=2.0.3600.0, Culture=neutral,
 PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ADConnString" connectionUsername="" connectionPassword=""/>
</providers>
</membership>
下面是揭开序幕保存视图的链接
<a href="javascript:void(document.frmCurrentLineItems.submit())" title="Saves this month only">Save This Month</a>
下面是一些基于jQuery的JavaScript代码:
$("form#frmCurrentLineItems").submit(function() {
submitView(this);
return false;
});
function submitView(form) {
$.ajax(
{
type: form.method,
url: form.action,
data: $(form).serialize(),
dataType: "html",
error: function(error) {
alert(error);
}
}
);
}
这里的控制方法的一部分:
[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");
}
注意上面的代码abt ...我很确定,拉会话中的预测对象不会导致错误,至少我假设它不是因为会话已过期,因为无法保存的用户在打开页面后无法保存,然后立即尝试保存。
类还具有以下属性:
[HandleError]
[Authorize]
public class ForecastController : Controller
{
该网站,在IIS中属性,在身份验证方法:
启用匿名访问泛滥,集成Windows身份验证检查。
下面就一起来看看IIS日志从遇到此问题的用户身份:
466 2009-04-28十六时41分15秒W3SVC1100645706 192.168.10.22 POST /预测/ CurrentLineItems - 443 - XX.XX .XX.XX Mozilla/4.0 +(compatible; + MSIE + 7.0; + Windows + NT + 5.1; + GTB5; +。NET + CLR + 1.1.4322)401 1 0
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 +(compatible; + MSIE + 7.0; + Windows + NT + 5.1; + GTB5; + .NET + CLR +1.1.4322)302 0 0
468 2009-04-28 16:41:15 W3SVC1100645706 192.168.10.22 GET/Shared/Error - 443 - XX.XX.XX.XX Mozilla/4.0 +(compatible; + MSIE + 7.0 +的Windows NT + 5.1 + + GTB5; + NET + CLR + 1.1.4322 )401 1 0
469 2009-04-28 16:41:16 W3SVC1100645706 192.168.10.22 GET/Shared/Error - 443 DOMAIN \ username XX.XX.XX.XX Mozilla/4.0 +(compatible; + MSIE + 7.0; + Windows + NT + 5.1; + GTB5; +。NET + CLR + 1.1.4322)404 0 0
下面是那些相同的行剥离,希望更好的可读性:
2009-04-28 16:41:15 POST/Forecast/CurrentLineItems - 443 - XX.XX.XX.XX 401 1 0
2009-04-28 16:41:15 POST/Forecast/CurrentLineItems - 443 DOMAIN \ username XX.XX.XX.XX 302 2009-04-28 16:41:15 GET/Shared/Error - 443 - XX.XX.XX.XX 401 1 0
2009-04-28 16:41:16 GET/Shared/Error - 443 DOMAIN \用户名XX.XX.XX.XX 404 0 0
只注意到所有的POST请求看起来像上面......除了成功的一个的第二POST返回一个200 ......
那么如何我确定是什么导致上面的第一个POST ...没有DOMAIN \用户名信息并获得401错误的网络服务器?
又是为什么302错误?
好像我要求两个POSTS ...但我不太明白为什么浏览器发送两个POST请求? (当然...我怀疑我的代码,但不能完全弄清楚为什么。)
任何疑难解答方法,以帮助追查上述错误,将不胜感激。
正在采取看看现在Troubleshooting HTTP 401 errors in IIS编辑....这并没有真正的帮助瓦特/我的问题
詹姆斯,感谢您花时间回答。我似乎已经通过将上面的链接更改为具有提交类型的输入按钮来解决错误... ...再次感谢 – w4ik 2009-05-13 13:28:52