当前位置: 首页 > 知识库问答 >
问题:

ASP。NETMVC4-使用post方法

江洲
2023-03-14

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

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

无法从媒体类型为应用程序/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 ???
    }
}

为什么我遇到一个问题:

无法从媒体类型为应用程序/x-www-form-urlencoded的内容中读取类型为字符串的对象。

完整的错误消息:

消息:“发生错误。”ExceptionMessage:“没有MediaTypeFormatter可用于从媒体类型为“application/x-www-form-urlencoded”的内容中读取“String”类型的对象。”ExceptionType:“System.InvalidOperationException”StackTrace:“位于System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent内容,类型,IEnumerable1格式化程序,IFormatterLogger格式化程序记录器),位于System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage请求,类型类型,IEnumerable1格式化程序,IFormatterLogger格式化程序记录器)在系统中。网状物Http。模型绑定。FormatterParameterBinding。在系统上执行ExecuteBindingAsync(ModelMetadataProvider metadataProvider、HttpActionContext actionContext、CancellationToken CancellationToken)。网状物Http。控制器。HttpActionBinding。

请求标头:

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:无缓存内容类型:应用程序/json; charset=utf-8过期:-1服务器:Microsoft IIS/8.0 X-AspNet-Version: 4.0.30319 X-Powerd-By: ASP. NET日期: Mon,08 Sep2014 18:06:10GMT内容长度: 1111

我怎样才能解决这个问题?

谢谢:)

共有1个答案

施飞驰
2023-03-14

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

f = new FormUrlEncodedMediaTypeFormatter();
f.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
f.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/x-www-form-urlencoded"));
 类似资料:
  • 我最近开始玩ASP。net MVC(4),但我不能对我遇到的这一个问题掉以轻心。我相信当你知道的时候这很容易。 我基本上是在索引视图中尝试执行以下操作: < li >在索引视图中列出“便笺”类型数据库中的当前项目(这很简单) < li >在同一索引视图中创建新项目(不太容易)。 所以我想我需要一个部分视图,并且我已经创建了如下(_CreateNote.cshtml): 在我的原始索引视图(Inde

  • 我已经创建了非核心webapi项目来与移动应用程序交互。例如,如果我创建了一个名为Data的控制器,它有一个名为Search的方法,如下图所示。该项目已配置为发送和接收json数据。 我可以通过使用以下url,使用postman向该方法发送post请求http://localhost/api/Data/search 类似地,我可以在控制器内创建其他函数,并使用路由“/api/[controller

  • 我做了一个请求做一个asp.netwebapi后方法,我不能够得到一个请求变量。 要求 WEB API Fnx 我无法通过两种方式获得var1内容。。。(除非我为此创建了一个类) 我该怎么做?

  • 我想了解如何在MVC4应用程序中解决统一命名类型注册。 我正在使用“Unity 3.0”和“Unity boostrapper for ASP.NET MVC”。 我知道unity是在DependencyResolver中注册的,所以我可以使用DependencyResolver方法来获取注册类型的实例。 当我想要回一个简单的注册时,这很好。 例如 但是,当我想获取对命名类型注册的引用时,IDep

  • 本文向大家介绍ASP使用MySQL数据库的方法,包括了ASP使用MySQL数据库的方法的使用技巧和注意事项,需要的朋友参考一下 MYSQL数据库以它短小、方便、速度快、免费等优点成为很多网站目前首选数据库,但一般都是用PHP+MYSQL相结合来开发各种动态页面,其实ASP也可以使用MYSQL数据库开发动态页面,小编我也是刚刚学会,不敢独享,所以特写了这篇文章供大伙参考。 我的环境是WINDOWS9

  • 本文向大家介绍django中使用POST方法获取POST数据,包括了django中使用POST方法获取POST数据的使用技巧和注意事项,需要的朋友参考一下 在django中获取post数据,首先要规定post发送的数据类型是什么。 1.获取POST中表单键值数据 如果要在django的POST方法中获取表单数据,则在客户端使用JavaScript发送POST数据前,定义post请求头中的请求数据类