Asp.net web api 如何接收从WebClient.UploadFile()发送的文件?

Asp.net web api 如何接收从WebClient.UploadFile()发送的文件?,asp.net-web-api,http-headers,webclient,system.net.webexception,media-type,Asp.net Web Api,Http Headers,Webclient,System.net.webexception,Media Type,由于此简单测试有效(在正文中传递字符串): 服务器代码: public string PostArgsAndFile([FromBody] string value, string serialNum, string siteNum) { string s = string.Format("{0}-{1}-{2}", value, serialNum, siteNum); return s; } 客户端代码: private void ProcessRESTPostFileDa

由于此简单测试有效(在正文中传递字符串):

服务器代码:

public string PostArgsAndFile([FromBody] string value, string serialNum, string siteNum)
{
    string s = string.Format("{0}-{1}-{2}", value, serialNum, siteNum);
    return s;
}
客户端代码:

private void ProcessRESTPostFileData(string uri)
{
    using (var client = new WebClient())
    {
        client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
        var data = "=Short test...";
        var result = client.UploadString(uri, "POST", data);
        MessageBox.Show(result);
    }
}
…然后我试着更进一步(朝着我真正需要做的方向——发送文件,而不是字符串);我将服务器代码更改为:

public string PostArgsAndFile([FromBody] byte[] value, string serialNum, string siteNum)
{
    byte[] bite = value;
    string s = string.Format("{0}{1}{2}", value.ToString(), serialNum, siteNum);
    return s;
}
using (var client = new WebClient())
{
    client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
    var result = client.UploadFile(uri, @"C:\MiscInWindows7\SampleXLS.csv");
}
…和此的客户端代码:

public string PostArgsAndFile([FromBody] byte[] value, string serialNum, string siteNum)
{
    byte[] bite = value;
    string s = string.Format("{0}{1}{2}", value.ToString(), serialNum, siteNum);
    return s;
}
using (var client = new WebClient())
{
    client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
    var result = client.UploadFile(uri, @"C:\MiscInWindows7\SampleXLS.csv");
}
…但它在运行时会随着以下情况而消亡:

System.Net.WebException未处理 HResult=-2146233079 Message=远程服务器返回错误:(415)不支持的媒体类型

那么,我怎样才能收到这样上传的文件呢?我需要什么媒体类型,如何指定

使现代化 由于我需要最终发送一个文件,或者至少发送一个文件的内容,我发现并将我的代码更改为:

using (var client = new WebClient())
{
    client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
    StringBuilder sb = new StringBuilder();
    using (StreamReader sr = new StreamReader(@"C:\MiscInWindows7\SampleXLS.csv"))
    {
        String line;
        while ((line = sr.ReadLine()) != null)
        {
            sb.AppendLine(line);
        }
    }
    string allLines = sb.ToString();
    byte[] byteData = UTF8Encoding.UTF8.GetBytes(allLines);
    byte[] responseArray = client.UploadData(uri, byteData);

    // Decode and display the response.
    MessageBox.Show("\nResponse Received.The contents of the file uploaded are:\n{0}",
        System.Text.Encoding.ASCII.GetString(responseArray));
}
…虽然这表明byteData已正确分配给,但服务器似乎没有任何内容—服务器的“值”属性:

public void PostArgsAndFile([FromBody] byte[] value, string serialNum, string siteNum)
…在调用该方法时只是一个空字节数组

我尝试删除[FromBody],但没有效果(没有更改),将其更改为[FromUri](我认为这不起作用,但在百灵鸟上尝试过)导致它崩溃,出现WebException

那么,如何让服务器接受/识别/接收字节数组呢?

这样做:

它不是传递文件本身,也不是字面意义上的,而是传递文件的内容,这对我来说已经足够好了。如果客户端必须创建一个xml文件,它只需在发送之前将该文件序列化为字符串,如下所示:

客户

private void button1_Click(object sender, EventArgs e)
{
    ProcessRESTPostXMLFileAsStr("http://Platypus:28642/api/Platypi/PostArgsAndXMLFileAsStr?serialNum=192837465&siteNum=42");
}

private void ProcessRESTPostXMLFileAsStr(string uri)
{
    using (var client = new WebClient())
    {
        client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
        StringBuilder sb = new StringBuilder();
        using (StreamReader sr = new StreamReader(@"C:\Platypus\eXtraneousMothLepidoptera.XML"))
        {
            String line;
            while ((line = sr.ReadLine()) != null)
            {
                sb.AppendLine(line);
            }
        }
        // I don't know why the prepended equals sign is necessary, but it is
        string allLines = "=" + sb.ToString();
        var result = client.UploadString(uri, "POST", allLines);
        MessageBox.Show(result);
    }            
}
服务器(Web API应用程序)