ASP.NET MVC 4-使用post方法

本文关键字:post 方法 使用 NET MVC ASP | 更新日期: 2023-09-27 18:21:03

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

事情进展顺利-我成功地使用了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"的内容。"ExceptionType:"System.InvalidOperationException"StackTrace:",位于System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent内容,类型类型,IEnumerable 1 formatters, IFormatterLogger formatterLogger) at System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable 1格式化程序,IFormatterLoggerformatterLogger)System.Web.Http.ModelBinding.FormaterParameterBinding.ExecuteBindingAsync(ModelMetadataProvider元数据提供程序,HttpActionContext actionContext,CancellationTokencancelloToken)System.Web.Http.Controllers.HttpActionBinding。<>c_DisplayClass1.b_0(HttpParameterBindingparameterBinder)System.Linq.Enumerable.WhereSelectArrayTerator 2.MoveNext() at System.Threading.Tasks.TaskHelpers.IterateImpl(IEnumerator 1枚举器,CancellationToken CancellationToken)"

请求标头:

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

响应标头:

缓存控制:无缓存Pragma:无缓存内容类型:application/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

我该如何解决这个问题?

感谢:)

ASP.NET MVC 4-使用post方法

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

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