繁体   English   中英

C#HttpWebRequest.GetRequestStream授权

[英]c# HttpWebRequest.GetRequestStream Authorization

我得到了一个带有Apiize标签的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(未授权)。

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

没错,理想情况下,GetRequestStream()调用应该已将请求发送到服务器,并且服务器以401响应。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM