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 (Not Authorized) が返されます。

これが意図した動作であるかどうかは疑問です。そして、それを変える方法があれば。たとえば、巨大なファイルをアップロードしたい場合、クライアントが許可されていないことを通知される前に、すべてのデータがアップロードされます。どういうわけかそれは私には意味がありませんか?それとも何かが恋しいですか?

4

1 に答える 1

0

おっしゃるとおり、理想的には、GetRequestStream() 呼び出しによって、要求がサーバーに送信され、サーバーが 401 で応答する必要があります。

最終ステータスで応答する前に、サーバーがデータの投稿を待っている可能性があると思います。これが、request.GetResponse() を呼び出したときに最終的な応答を取得する理由です。

いずれにせよ、例外を処理し、必要なことを行う必要があります。

于 2016-02-15T21:04:45.943 に答える