gpt4 book ai didi

asp.net-web-api - 没有 'MediaTypeFormatter' 可用于读取类型 'String' 的对象

转载 作者:行者123 更新时间:2023-12-01 01:37:05 30 4
gpt4 key购买 nike

我正在使用 ASP.NET Web API。我的 Controller 中有一个 Action ,如果没有参数,它可以正常工作。如果有一个参数,例如:

public string UploadFile(string actionType)

然后我的操作不会被调用,我会收到以下消息(在 Fiddler 中查看):

No 'MediaTypeFormatter' is available to read an object of type 'String' with the media type 'multipart/form-data'

我的global.asx中的路由如下:

"api/{controller}/{action}/{actionType}"

我正在使用 Jquery Post 来调用该操作:

    function upload() {

var actiontype = $("input:radio[name=actiontype]").val();
var formData = new FormData($('form')[0]);

$.ajax({
url: 'api/uploads/uploadfile/' + actiontype,
type: 'POST',
success: function (data) {
$("#mydiv").append(data);
},
error: function (data) {
$("#mydiv").append(data);
},
data: formData,
cache: false,
contentType: false,
processData: false
});
};

这是我的操作方法:

    public string UploadFile(string actionType)
{
if (Request.Content.IsMimeMultipartContent())
{
//Save file
MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(HttpContext.Current.Server.MapPath("~/Files"));
Request.Content.ReadAsMultipartAsync(provider);
}

return string.Format("Action {0} Complete!", actionType);
}

这是一个已知问题,有解决方法吗?如何使用参数执行简单的操作?

最佳答案

假设您使用默认路由,则您似乎发布到了错误的路径。这是 MVC 开发人员似乎遇到的常见困惑(我知道我遇到过)。 MVC 使用默认路径,例如:/Controller/Action

但是,在 Web API 的默认路由设置中,会跳过操作名称 (/api/Controller),然后通过 HTTP 谓词名称 (post) 和方法名称的交集找到方法(Post___) 和参数(如有必要)。

假设您有一个名为 Uploads 的 API Controller ,您应该有一个名为 PostUploadFile 的操作。

   $.ajax({
url: 'api/uploads/',
type: 'POST',

一些需要注意的事情...

  • 我以“发布...”文本开头了您的操作名称,这很重要,名称的其余部分则不重要
  • 您的帖子网址已缩写为控制者的名称。
  • 我更深入地解释了 mapping here .
<小时/>

编辑

显然您正在经历 WebAPI 的怪事。解决这个问题的方法是将“actionType”参数填充到一个简单的对象中,以便模型绑定(bind)可以接管。

Rick Strahl 解释了这一点和 some other binding oddities here 。还有another SO question解决类似问题。

关于asp.net-web-api - 没有 'MediaTypeFormatter' 可用于读取类型 'String' 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10475189/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com