C# 将文件发布到ApiController

C# 将文件发布到ApiController,c#,asp.net,asp.net-web-api,model-view-controller,C#,Asp.net,Asp.net Web Api,Model View Controller,我不熟悉ApicController,也不熟悉如何将文件从客户端发送到api并从这里保存。下面的代码确实有效,文件从客户端“复制”到服务器,但是响应消息是“204无内容”-我应该注意这里的任何事情吗 ApiController代码如下所示: [HttpPost] [Route("api/UploadFile")] public async Task UploadFile() { string fileName = "myfil

我不熟悉ApicController,也不熟悉如何将文件从客户端发送到api并从这里保存。下面的代码确实有效,文件从客户端“复制”到服务器,但是响应消息是“204无内容”-我应该注意这里的任何事情吗

ApiController代码如下所示:

    [HttpPost]      
    [Route("api/UploadFile")]     
    public async Task UploadFile()
    {
        string fileName = "myfilename.txt";
        Stream requestStream = await Request.Content.ReadAsStreamAsync();        

        using (FileStream fileStream = File.Create(@"C:\myDropFolder\" + fileName))
        {
            await requestStream.CopyToAsync(fileStream);
        }         
    }
对客户端的调用如下所示,从控制台应用程序进行测试:

 class Program
{
    static void Main(string[] args)
    {
        try
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost:1741/api/UploadFile/");
            request.Method = WebRequestMethods.Http.Post;

            byte[] fileToSend = File.ReadAllBytes(@"C:\myDropFolder\tester.txt");
            request.ContentLength = fileToSend.Length;

            using (Stream requestStream = request.GetRequestStream())
            {
                // Send the file as body request. 
                requestStream.Write(fileToSend, 0, fileToSend.Length);
                requestStream.Close();
            }

            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                Console.WriteLine("HTTP/{0} {1} {2}", response.ProtocolVersion, (int)response.StatusCode, response.StatusDescription);
                Console.ReadLine();            

        }
        catch (Exception)
        {
            throw;
        }
    }
}

POST的Web API默认响应状态代码为204,GET的默认响应状态代码为200()。除非返回
IHttpActionResult
,然后显式返回200:

[HttpPost]      
[Route("api/UploadFile")]     
public async Task<IHttpActionResult> UploadFile()
{
    string fileName = "myfilename.txt";
    Stream requestStream = await Request.Content.ReadAsStreamAsync();        

    using (FileStream fileStream = File.Create(@"C:\myDropFolder\" + fileName))
    {
        await requestStream.CopyToAsync(fileStream);
    }
    return Ok(); 
}
[HttpPost]
[路由(“api/上传文件”)]
公共异步任务上载文件()
{
字符串fileName=“myfilename.txt”;
Stream requestStream=wait Request.Content.ReadAsStreamAsync();
使用(FileStream FileStream=File.Create(@“C:\myDropFolder\”+fileName))
{
等待requestStream.CopyToAsync(文件流);
}
返回Ok();
}

Web API的POST默认响应状态代码为204,GET默认响应状态代码为200()。除非返回
IHttpActionResult
,然后显式返回200:

[HttpPost]      
[Route("api/UploadFile")]     
public async Task<IHttpActionResult> UploadFile()
{
    string fileName = "myfilename.txt";
    Stream requestStream = await Request.Content.ReadAsStreamAsync();        

    using (FileStream fileStream = File.Create(@"C:\myDropFolder\" + fileName))
    {
        await requestStream.CopyToAsync(fileStream);
    }
    return Ok(); 
}
[HttpPost]
[路由(“api/上传文件”)]
公共异步任务上载文件()
{
字符串fileName=“myfilename.txt”;
Stream requestStream=wait Request.Content.ReadAsStreamAsync();
使用(FileStream FileStream=File.Create(@“C:\myDropFolder\”+fileName))
{
等待requestStream.CopyToAsync(文件流);
}
返回Ok();
}

非常感谢您对Arin的解释!非常感谢你的解释,阿林!