6

我在 asp.net Web API 中。在登录方法中,我根据数据库检查用户/密码,如果它们不匹配,我将返回 401 状态代码以及invalid user or password method类似

var content = new StringContent("Invalid user name or password");
var message = new HttpResponseMessage(HttpStatusCode.Unauthorized);
message.Content = content;
throw new HttpResponseException(message);

但是 API 似乎忽略了我的信息,只是返回了一些 HTML,比如

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>401 - Unauthorized: Access is denied due to invalid credentials.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
 <div class="content-container"><fieldset>
  <h2>401 - Unauthorized: Access is denied due to invalid credentials.</h2>
  <h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>
 </fieldset></div>
</div>
</body>
</html>

这是为什么?我怎样才能覆盖这个?

4

2 回答 2

1

One potential cause of this response is the IIS web site being configured to allow Forms authentication. Look at this older but still valid post on configuring IIS to disable Forms authentication for the Web API.

于 2012-09-20T12:20:20.487 回答
1

我相信您得到的响应来自 IIS,而不是来自 Web Api。如果您想在您的 API 中自己处理身份验证过程,您需要告诉 IIS 允许匿名访问,以便它不会妨碍您。

此外,当您返回 401 时,您必须返回 www-authenticate 标头(请参阅http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2)。这告诉客户端允许哪种类型的身份验证。

于 2012-09-20T12:38:49.917 回答