C# 将PDF文件从Fiddler上载到WebAPI方法会导致415种不受支持的媒体类型
我试图将PDF文件上载到我的WebAPI方法,但收到415不支持的媒体类型错误。我是否需要在我的WebApiConfig.cs文件中放入特定的内容以允许使用PDF格式化程序 这是我的控制器代码的签名:C# 将PDF文件从Fiddler上载到WebAPI方法会导致415种不受支持的媒体类型,c#,asp.net,asp.net-mvc-4,pdf,asp.net-web-api,C#,Asp.net,Asp.net Mvc 4,Pdf,Asp.net Web Api,我试图将PDF文件上载到我的WebAPI方法,但收到415不支持的媒体类型错误。我是否需要在我的WebApiConfig.cs文件中放入特定的内容以允许使用PDF格式化程序 这是我的控制器代码的签名: [HttpPost] public HttpResponseMessage SavePdf(HttpPostedFileBase file) { string fileLocation = @"\\server\shared\appname\
[HttpPost]
public HttpResponseMessage SavePdf(HttpPostedFileBase file)
{
string fileLocation = @"\\server\shared\appname\";
...
我的WebAPI当前托管在localhost
上。我从Fiddler调用这个WebAPI方法。这是Fiddler的“Composer”选项卡(然后单击蓝色上传文件链接上传我的PDF):
以下是Fiddler中产生的HTTP 415错误:
我的直觉是我需要告诉我的WebAPI接受PDF媒体类型(application/PDF),但我不确定。。。有什么想法吗?这意味着文件格式不是在
global.asax中配置的预期媒体格式:
var config = System.Web.Http.GlobalConfiguration.Configuration;
config.Formatters.Insert(0, new System.Net.Http.Formatting.JsonMediaTypeFormatter());
您可以做两件事,一是实现meadia格式以接受文件,或者您可以调整一个控制器以接受文件,如下所示:
public class UploadController : ApiController
{
public async Task < HttpResponseMessage > PostFormData()
{
var root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
try
{
// Read the form data.
await Request.Content.ReadAsMultipartAsync(provider);
// Show all the key-value pairs.
foreach(var key in provider.FormData.AllKeys)
{
foreach(var val in provider.FormData.GetValues(key))
{
var keyValue = string.Format("{0}: {1}", key, val);
}
}
foreach(MultipartFileData fileData in provider.FileData)
{
var fileName = fileData.Headers.ContentDisposition.FileName;
}
return Request.CreateResponse(HttpStatusCode.OK);
}
catch (Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}
}
...
公共类上载控制器:ApiController
{
公共异步任务PostFormData()
{
var root=HttpContext.Current.Server.MapPath(“~/App_Data”);
var provider=新的MultipartFormDataStreamProvider(根);
尝试
{
//读取表单数据。
wait Request.Content.ReadAsMultipartAsync(提供程序);
//显示所有键值对。
foreach(provider.FormData.AllKeys中的var键)
{
foreach(provider.FormData.GetValues(键)中的var val)
{
var keyValue=string.Format(“{0}:{1}”,key,val);
}
}
foreach(provider.fileData中的MultipartFileData文件数据)
{
var fileName=fileData.Headers.ContentDisposition.fileName;
}
返回Request.CreateResponse(HttpStatusCode.OK);
}
捕获(例外e)
{
返回请求.CreateErrorResponse(HttpStatusCode.InternalServerError,e);
}
}
}
...
您可以在此处阅读更多信息:
您只需阅读下面的这篇文章:
不要使用HttpPostedFileBase
作为参数,因为Web API尝试使用配置中的格式化程序对请求内容进行建模绑定…Web API内部没有用于多部分的格式化程序…您需要以特定方式读取多部分请求内容…还需要从MVC中读取HttpPostedFileBase
关于文件名,您可以查看上面文章中的这一行file.Headers.ContentDisposition.FileName
。您如何在Web Api控制器中读取请求内容?检查这张图片:@KiranChalla它甚至从未到达SavePdf
的入口点-我在第一个大括号处设置了一个断点,所以为了回答您的问题,它甚至从未到达该点。这就是为什么我的直觉是我需要给WebApiConfig.cs添加一些东西,但是我确定。哦,等等。不要使用HttpPostedFileBase
。这是在MVC中使用的。取而代之的是,不要使用任何参数,只需按照我上面提到的文章进行操作。@KiranChalla那么我如何从上传的文件中获取文件名,以便在代码中使用,从而将此文件保存到共享中?这里有任何一位plz可以帮助我: