c#HttpWebRequest.GetRequestStream授权

时间:2016-02-15 14:49:23

标签: c# http-post httpwebrequest asp.net-authorization

我有一个用授权标签标记的网络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(未授权)。

我只是想知道,这是否是预期的行为?如果有任何改变的方法。例如,如果我想上传一个巨大的文件,所有数据将在客户被告知无权这样做之前上传。某种程度上对我没有意义?或者我会错过什么?

1 个答案:

答案 0 :(得分:0)

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

我认为可能发生的事情是服务器在回复最终状态之前等待您发布数据。这就是为什么在调用request.GetResponse()

时得到最终响应的原因

在任何情况下,您都应该处理异常并做必要的事情。