Asp.net web api Web API文件传输未经授权的错误

Asp.net web api Web API文件传输未经授权的错误,asp.net-web-api,Asp.net Web Api,我正在使用ASP.NETMVC5和WebAPIv2编写一个简单的WebAPI应用程序。api应该从在Winforms应用程序中使用HttpClient的客户端接收二进制文件。应用程序和网站应在带有Active Directory的封闭网络上运行 控制员: [Route("FileTest"] public HttpResponseMessage PostTest([FromBody]HttpPostedFileBase file) { // does nothing just retun

我正在使用ASP.NETMVC5和WebAPIv2编写一个简单的WebAPI应用程序。api应该从在Winforms应用程序中使用
HttpClient
的客户端接收二进制文件。应用程序和网站应在带有Active Directory的封闭网络上运行

控制员:

[Route("FileTest"]
public HttpResponseMessage PostTest([FromBody]HttpPostedFileBase file)
{
    // does nothing just retuns ok
}
客户:

public void SendFile(string fileName)
{
     using(FileStream fileStream  = new FileStream(fileName, fileMode.open, FilleAccess.read))
     {
        using(MultipartFormDataContent data = new MultipartFormDataContent ())
        {
           using(StreamContent streamcontent = new StreamContent(fileStream))
           {
                data.Add(streamcontent );
                HttpClient client = new HttpClient();
                res = client .PostAsync("address", data).Result;
                res.EnsureSucessStatusCode();   // exception unauthorized
           }
         }
     }

为什么这不起作用?

HttpPostedFileBase是一个MVC类,它不是一个Web API类,所以它们不太可能一起工作

与其尝试将文件作为参数传递,不如将请求内容作为流读取

[Route("FileTest"]
public async Task<HttpResponseMessage> PostTest(HttpRequestMessage request)
{
    var stream = await request.Content.ReadAsStreamAsync();
    // ...
}
[路由(“文件测试”]
公共异步任务后测试(HttpRequestMessage请求)
{
var stream=await request.Content.ReadAsStreamAsync();
// ...
}

谢谢。但如何获取文件详细信息?如文件名和长度?我在客户端的代码是否正确?如果我想从网页发送文件,该怎么办?@user3404887长度在request.Content.Headers.ContentLength中,您可以设置ContentDisposition头以传递文件名。