Web API を実装しました。
<authentication mode="None" />
私は基本認証を使用しており、AuthorizeAttribute で Thread.CurrentPrincipal を設定しています。
アプリケーションを起動/デバッグした後、初めてリクエストを送信し、サーバー側で Thread.CurrentPrincipal (IsAuthenticated = true) を設定すると、IsAuthenticated はコントローラーで true を返します。ただし、この後のすべての要求では、Thread.CurrentPrincipal が通常どおりに設定されますが、実行がコントローラー メソッドに到達するまでに、コントローラーの User.Identity プロパティが変更され、IsAuthenticated = false になります。
アプリケーションのみを起動した後、初めて IsAuthenticated=true の理由がわかりません?! Thread.CurrentPrinciple を手動で設定しているので、毎回行う必要がありますが、そこからコントローラーを叩くまでのどこかで、置き換えられています!
アップデート
これは、私が追加した MediaTypeFormatter と関係があります。フォーマッタを削除すると、問題は発生しません。実行されるフォーマッタのコードは次のとおりです。
public override Task<object> ReadFromStreamAsync(Type type, System.IO.Stream webStream, System.Net.Http.HttpContent content, IFormatterLogger formatterLogger)
{
return Task.Factory.StartNew(() =>
{
string temporaryFilePath = Path.Combine(TemporaryDirectory, Path.GetRandomFileName());
using (FileStream fileStream = new FileStream(temporaryFilePath, FileMode.CreateNew, FileAccess.Write, FileShare.Read))
{
webStream.CopyTo(fileStream);
}
return (object)new CustomFile(temporaryFilePath);
});
}