【问题标题】:ASP.NET MVC 4 - using post methodASP.NET MVC 4 - 使用 post 方法
【发布时间】:2014-09-08 16:48:37
【问题描述】:

在 Visual Studio 2010 中,我使用 ASP.NET MVC 4 来创建 Web api 项目,如本示例所示:https://www.youtube.com/watch?v=H9vBxAH4f5E

一切正常 - 我使用 GET 方法成功,但是在使用 POST 方法时,我遇到了一个问题:

没有 MediaTypeFormatter 可用于读取“字符串”类型的对象 来自媒体类型为“application/x-www-form-urlencoded”的内容。

我的webapiconfig.cs 看起来像这样:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        FormUrlEncodedMediaTypeFormatter f;

        config.Formatters.Clear();
        config.Formatters.Add(new JsonMediaTypeFormatter());

        f = new FormUrlEncodedMediaTypeFormatter();
        f.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

        config.Formatters.Add(f);
        // application/x-www-form-urlencoded ???
    }
}

为什么会遇到问题:

没有 MediaTypeFormatter 可用于读取“字符串”类型的对象 来自媒体类型为“application/x-www-form-urlencoded”的内容。

完整的错误信息:

消息:“发生错误。”异常消息:“没有 MediaTypeFormatter 可用于读取“字符串”类型的对象 来自媒体类型为“application/x-www-form-urlencoded”的内容。” 异常类型:“System.InvalidOperationException”堆栈跟踪:“在 System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent 内容,类型类型,IEnumerable1 formatters, IFormatterLogger formatterLogger) at System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable1 格式化程序,IFormatterLogger 格式化程序记录器)在 System.Web.Http.ModelBinding.FormatterParameterBinding.ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken 取消令牌)在 System.Web.Http.Controllers.HttpActionBinding.c__DisplayClass1.b__0(HttpParameterBinding 参数绑定器)在 System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext() at System.Threading.Tasks.TaskHelpers.IterateImpl(IEnumerator1 枚举器,CancellationToken cancelToken)"

请求头:

User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.103 Safari/537.36
Origin: chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo
Content-Type: application/x-www-form-urlencoded 
Accept: */*
Accept-Encoding: gzip,deflate
Accept-Language: he-IL,he;q=0.8,en-US;q=0.6,en;q=0.4

响应头:

Cache-Control: no-cache Pragma: no-cache Content-Type: 应用程序/json; charset=utf-8 过期:-1 服务器: Microsoft-IIS/8.0 X-AspNet-版本:4.0.30319 X-Powered-By:ASP.NET 日期:2014 年 9 月 8 日星期一 18:06:10 GMT 内容长度:1111

我该如何解决这个问题?

谢谢:)

【问题讨论】:

    标签: c# post formatter


    【解决方案1】:

    您只需要将新的媒体类型添加到支持的格式列表中:

    f = new FormUrlEncodedMediaTypeFormatter();
    f.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
    f.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/x-www-form-urlencoded"));
    

    【讨论】:

    • 我这样做了 - 仍然有同样的问题。请参阅我在此线程上发布的新扩展详细信息。谢谢:)
    • 是的。很久以前...我必须对代码进行一些更改(不记得了-我可以挖掘代码并放入一些代码...
    • 现在回想起来,感觉就像是 IIS 配置问题。
    猜你喜欢
    • 2011-01-04
    • 2012-09-16
    • 2017-01-02
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多