不受支持的媒体类型web api帖子

时间:2015-06-12 08:36:15

标签: c# angularjs asp.net-web-api

我正在使用angularjs发布创建的webapi数据。它在我的本地系统上工作,但是当我上传到服务器上时它无法正常工作并返回错误,不支持的媒体类型。请帮我解决这个问题。

<script>
var app = angular.module('MyApp', []);

app.controller("QueryControllerController", function ($scope, $http) {

    $scope.submit = function () {
        if ($scope.QueryDescription) {
            var product = {
                "QueryDescription": $scope.QueryDescription,
                "CategoryID": $scope.CategoryID

            }
            $http.post('/api/querycontroller', JSON.stringify(product)).
            success(function (data, status, headers, config) {
                alert('Added Successfully' + headers);
                $('#formusers')[0].reset();
            }).
            error(function (data, status, headers, config) {
                alert(status + ", " + data + ", " + headers + "," + config);
            });
        }
    };

}
);

我的api控制器代码是:

[ResponseType(typeof(Query))]

    [HttpPost]
    public HttpResponseMessage Post([FromBody]Query Services)
    {

        Services.CommunityID = UserStatus.GetUserID(User.Identity.Name);
        Services = repository.Add(Services);
        var response = Request.CreateResponse<Query>(HttpStatusCode.Created, Services);
        string uri = Url.Route(null, new { id = Services.QueryID });
        response.Headers.Location = new Uri(Request.RequestUri, uri);

        return response;

    }

当我尝试发布时,我得到不支持的媒体类型响应。:

  "Message": "The request entity's media type 'text/plain' is not supported   for this resource."

1 个答案:

答案 0 :(得分:1)

删除[ResponseType(typeof(Query))]并使用ViewModel类作为参数

[HttpPost]
public HttpResponseMessage Post([FromBody]ProductViewModel product)
{

也...

尝试https://stackoverflow.com/users/1267724/john建议的方法(在agunlar控制器中)作为这篇文章的答案: change Content-type to "application/json" POST method, RESTful API

  

在Angular中发布JSON对象非常简单。您需要做的就是:

     

创建Javascript对象

     

我将使用您代码中的确切属性。

var postObject = new Object();
postObject.userId = "testAgent2";
postObject.token = "testAgent2";
postObject.terminalInfo = "test2";
postObject.forceLogin = "false";
Post the object to the API
  

要将对象发布到API,您只需要一个简单的$ http.post   功能。见下文:

$http.post("/path/to/api/", postObject).success(function(data){
    //Callback function here.
    //"data" is the response from the server.
});
  

由于JSON是发布到API的默认方法,因此没有必要   重置它。有关详细信息,请参阅$ http快捷方式中的此链接。

     

关于您的代码,请尝试更改您的保存方法   包括这个简单的帖子方法。