我已经实现了一个 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);
});
}