1

我有一个带有 Authorize 标签的 Web Api 控制器。 https://msdn.microsoft.com/de-de/library/system.web.http.authorizeattribute(v=vs.118).aspx

[Authorize()]
public class SomeController : ApiController {}

我正在使用 HttpWebRequest 对该控制器执行 Post-Request,如下所示:(请注意,我没有提供授权标头来显示我的问题)

var httpWebRequest = (HttpWebRequest)WebRequest.Create("SomeUrl");
httpWebRequest.ContentType = "text/json";
httpWebRequest.Method = "POST";

StreamWriter streamWriter;

// 1) no error here, works without authentication
using (streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
    string json = "{\"Message\":\"Test\"," + "\"Data\":\"\"}";

    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();
}


// 2) here I get a 401: not authorized
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

问题: 在请求请求流时,我希望得到一个未经授权的异常。但我可以调用 GetRequestStream 甚至写入该流,没有任何问题。只有在调用 GetRespone 时,我才会收到我之前预期的 401(未授权)。

我只是想知道,这是否是预期的行为?如果有任何方法可以改变它。例如,如果我要上传一个大文件,在通知客户端无权这样做之前,所有数据都会被上传。不知何故,这对我来说没有意义?还是我错过了什么?

4

1 回答 1

0

你是对的,理想情况下,GetRequestStream() 调用应该导致请求被发送到服务器,并且服务器以 401 响应。

我认为可能发生的情况是服务器正在等待您发布数据,然后再回复最终状态。这就是为什么您在调用 request.GetResponse() 时会得到最终响应的原因

无论如何,您应该处理异常并做必要的事情。

于 2016-02-15T21:04:45.943 回答