2016-03-01 36 views
1

我正在编写一个使用AngularJS的Ionic应用程序,并且正在尝试将POST发送到我的ASP.NET MVC应用程序。

在我的客户,我有:

function testPost(url, token) { 
    var deferred = $q.defer(); 
    var params = {'token': token }; 

    $http({ 
    method: 'POST', 
    url: url, 
    data: params, 
    headers: { 'Content-Type': 'application/json' } 
    }) 
    .success(function (data, status, headers, config) { 
     deferred.resolve(data); 
    }).error(function(data, status, headers, config) { 
     deferred.reject(data); 
    }); 

    return deferred.promise; 
} 

在我的服务器我有:

protected override void OnActionExecuting(ActionExecutingContext ctx) 
{ 
    base.OnActionExecuting(ctx); 
    string token = (string)Request.Form["token"]; 
} 

但调试我的服务器代码时,Request.Form没有元素。我可以在Postman中以token的形式设置一个POST,该值设置为主体中的相同动作,并看到Request.Form的值为token。我曾尝试使用headers: { 'Content-Type': 'x-www-form-urlencoded' },并试图做data: JSON.stringify(params)。我不确定谁在这里犯错,我的客户端实现或服务器实现。任何帮助将不胜感激。

回答

0

您发布的数据不是表格数据。它是json请求体。你不会从Request.Form获取这些数据。您将不得不更改您的客户端代码以发送表单字段或将您的服务器代码更改为接受json数据作为模型的方法。

public ActionResult Post(ModelOfData data){//do something with data.} 

原因,它的工作原理与邮递员是您正在使用的内容类型:表格数据 但在JavaScript您发送的JSON请求它不会工作

+0

感谢您使这一澄清。因为这是一个将被发送到许多操作的参数,所以我想在'OnActionExecuting()'中读取它,所以现在我只是看着'HttpContext.Request.InputStream'而不是'Request.Form'。 – jafant

+0

看起来像你正尝试使用此令牌进行身份验证。如果你是那么你应该使用自定义授权过滤器 – Gurpreet

相关问题