c# - 从客户端调用 MVC Web API Controller 方法

标签 c# asp.net-mvc file-upload asp.net-web-api2

我正在尝试使用/调用 MVC Web API Controller 方法,该方法将用于上传文件。我很难从我的 MVC Controller 调用它。

这是我的 API Controller 代码

public class ImportController : ApiController
{
    [HttpPost]
    public bool PutImportFile(byte[] fileToBeImported, string nameOfTheFileToBeImported)
    {   
        // I am doing file saving stuff here             
    }
}

我已经通过将方法更改为 HttpGet 来测试文件保存部分,并且当我直接从浏览器调用它时它的工作原理。我为此删除了参数。

但是,我不知道如何从客户端调用它。

我已经在下面尝试过了。

public class ImportFileModel
{
    public byte[] FileToBeImported { get; set; }

    public string NameOfTheFileToBeImported { get; set; }
}

下面的代码将从浏览器中接受用户上传的文件并将其发送到 API Controller 以保存文件。

[HttpPost]
public async Task<JsonResult> Upload()
{
    byte[] file;
    string fileName = string.Empty;

    if (Request.Files.Count > 0)
    {
        try
        {
            fileName = Request.Files[0].FileName;

            using (MemoryStream ms = new MemoryStream())
            {
                Request.Files[0].InputStream.CopyTo(ms);
                file = ms.ToArray();
            }

            //To do: get url from configuration
            string url = "http://localhost:(port)/api/Import/PutImportFile";

            using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri(url);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/bson"));

                ImportFileModel request = new ImportFileModel
                {
                    FileToBeImported = file,
                    NameOfTheFileToBeImported = fileName
                };

                MediaTypeFormatter bsonFormatter = new BsonMediaTypeFormatter();
                var result = await client.PostAsync(url, request, bsonFormatter);

                HttpResponseMessage response = result.EnsureSuccessStatusCode();
            }
        }
        catch (Exception ex)
        {
            // exception handling here
        }
    }

    return Json(true, JsonRequestBehavior.AllowGet);
}

它在最后一行以异常结束。

HttpResponseMessage response = result.EnsureSuccessStatusCode();

抛出 404 not found 错误。

我也尝试过使用 HttpWebRequest 从控制台应用程序进行同样的操作。它还会引发相同的错误。

最佳答案

您的 Web API 方法 PutImportFile 设置为接收两个值,而不是单个模型;因此,您的 HttpClient 调用未被识别(未找到匹配的路由)。更改您的 Web API 方法以接收模型:

public class ImportController : ApiController
{
    [HttpPost]
    public bool PutImportFile(ImportFileModel fileInfo)
    {   
        //Your code to save the file...            
    }
}

关于c# - 从客户端调用 MVC Web API Controller 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43085934/

相关文章:

c# - 将 Func 传递给 Linq to Entities Sum(..)

java - 使用 multipart/form-data android 上传文件时出错

java - GXT FileUploadField 的按键事件

jquery - 优雅地回退到移动设备上的普通文件 uploader (Windows 移动问题)

c# - 向 DataGrid 添加滚动事件

c# - 文件浏览器 TreeView MVVM

c# - 如何向分组的 WPF 数据网格项添加额外的属性计数?

javascript - ASP.NET MVC 4 JQuery 对话框

c# - Active Directory 组在创建后无法立即可用

asp.net-mvc - ASP.NET MVC - DbContext 良好实践