C# ASP.NET MVC 4-使用post方法

C# ASP.NET MVC 4-使用post方法,c#,post,formatter,C#,Post,Formatter,在Visual Studio 2010中,我使用ASP.NET MVC 4创建web api项目,如下示例所示: 事情进展顺利-我成功地使用了GET方法,但在使用POST方法时,我遇到了一个问题: 没有MediaTypeFormatter可用于读取“String”类型的对象 来自媒体类型为“application/x-www-form-urlencoded”的内容 我的webapiconfig.cs如下所示: public static class WebApiConfig { publ

在Visual Studio 2010中,我使用ASP.NET MVC 4创建web api项目,如下示例所示:

事情进展顺利-我成功地使用了
GET
方法,但在使用
POST
方法时,我遇到了一个问题:

没有MediaTypeFormatter可用于读取“String”类型的对象 来自媒体类型为“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可用于读取“String”类型的对象 来自媒体类型为“application/x-www-form-urlencoded”的内容

完整错误消息:

消息:“发生错误。”例外消息:“否 MediaTypeFormatter可用于读取“String”类型的对象 来自媒体类型为“application/x-www-form-urlencoded”的内容。“ 异常类型:“System.InvalidOperationException”StackTrace:“在 System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent 内容、类型、IEnumerable
1格式化程序、IFormatterLogger
格式化程序记录器)在
System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage
请求、类型、IEnumerable
1格式化程序、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.whereselectArrayInterator
2.MoveNext()位于
System.Threading.Tasks.TaskHelpers.IterateImpl(IEnumerator
1 枚举器,CancellationToken CancellationToken)

请求标头:

响应标题:

缓存控制:无缓存杂注:无缓存内容类型: 应用程序/json;charset=utf-8过期:-1台服务器: Microsoft IIS/8.0 X-AspNet-Version:4.0.30319 X-Powered-By:ASP.NET 日期:2014年9月8日星期一18:06:10 GMT内容长度:1111

我怎样才能解决这个问题


谢谢:)

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

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

我做到了——仍然有同样的问题。请参阅我在本帖上发布的新扩展详细信息。谢谢:)是的。很久以前。。。我必须对代码进行一些更改(不记得了-我可以深入挖掘代码并放入一些代码…现在回想起来,感觉像是IIS配置问题。
f = new FormUrlEncodedMediaTypeFormatter();
f.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
f.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/x-www-form-urlencoded"));