2017-10-20 75 views
2

我正在使用MVC.net并将发布数据发送到我的Web API 2控制器。我不断收到500内部服务器错误消息。尽管启用了CORS,但无法使用ajax发布到其他域

我想发布到另一个域,如果重要?我有2个visual studio实例正在运行,一个充当客户端,另一个充当服务器。我已经启用了CORS。

GET的工作正常,但现在我试图发布。

我的“服务器”上的控制器是

[HttpPost] 
[Route("api/cms/")] 
public IHttpActionResult Post([FromBody]int accountId, [FromBody]string content, [FromBody]string paneId, [FromBody]string url) 
{ 
    //content 
} 

“客户”我使用的JavaScript是

function ajaxStart(type, url, data, successDelegate, failDelegate, errorDelegate) { 
    $.ajax({ 
     type: type.toUpperCase(), 
     url: url, 
     contentType: "application/json;charset=utf-8", 
     data: data, 
     dataType: "json", 
     success: function (response) { 
      successDelegate(response); 
     }, 
     failure: function (e) { 
      failDelegate(e.statusText); 
     }, 
     error: function (e) { 
      errorDelegate(e.statusText); //always hit 
     } 
    }) 
} 

的数据与(我故意用废话创建字符串只是为了确保格式化没有任何问题)

var data = JSON.stringify({ accountId: 1, paneId: "_selectedPaneNumber", url: "_url", content: "content" }); 

而'header'view in谷歌Chrome浏览器开发工具显示:

enter image description here

我不知道我做了什么错。

+0

[2的WebAPI POST单字符串参数不工作呢](的可能的复制https://stackoverflow.com/questions/37842231/webapi-2-post-with-single-string-parameter-not-wokring ) – Igor

+0

我已经完全更新了我的帖子,现在它不是一个笨蛋。 – MyDaftQuestions

回答

4

在客户端的JavaScript显示正常。这个问题似乎与ApiController的操作和参数绑定有关。

最多允许一个参数从消息体中读取。所以这是行不通的:

public IHttpActionResult Post([FromBody]int accountId, [FromBody]string content, [FromBody]string paneId, [FromBody]string url) { ... } 

其原因规则是要求身体可能存储在只能读一次非缓冲流。

来源:Parameter Binding in ASP.NET Web API : Using [FromBody]

考虑在行动服务器端

public class MyModel { 
    public int accountId { get; set; } 
    public string content { get; set; } 
    public string paneId { get; set; } 
    public string url { get; set; } 
} 

创建模型和更新的动作预期。

[HttpPost] 
[Route("api/cms/")] 
public IHttpActionResult Post([FromBody] MyModel model) { 
    //code removed for brevity 
} 
+0

这太好了。我已经提出了一个新的对象,并且如何实现它的工作,但是当我学习时,我无法弄清楚为什么FromBody不起作用。谢谢。当网站允许我时,将标记为答案。并在24小时内奖励赏金! – MyDaftQuestions

1

如果您想发送一个字符串作为体执行以下操作:

  • 添加标题:Content-Type: application/x-www-form-urlencoded
  • 变化在体内的字符串值,因此它带有前缀=字符:=5
+0

同样的问题仍在继续。传递的值总是为空 – MyDaftQuestions

+0

对不起,我完全编辑了这个问题,这已不再相关 – MyDaftQuestions

+0

@MyDaftQuestions - 我明白了。下一次,虽然我会建议在解决更大的问题时开始一个新的问题,而不是多次变形相同的问题。做后者这通常是皱眉,也被称为“变色龙”的问题。无论如何,我很高兴你有你需要继续编码的答案。 – Igor

相关问题