我正在尝试使用/调用 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/