将字符串从javascript代码发布到服务器上的ApiController

将字符串从javascript代码发布到服务器上的ApiController,javascript,c#,asp.net-mvc,post,Javascript,C#,Asp.net Mvc,Post,我开始玩ASP.NETWebAPI。当我在控件中获得实体时,我想知道序列化功能,如下一步: public class EntitiesController : ApiController { [Queryable] public IEnumerable<Entity> Get() { return m_repository.GetAll(); } public HttpResponseMessage Post(Entity en

我开始玩ASP.NETWebAPI。当我在控件中获得实体时,我想知道序列化功能,如下一步:

public class EntitiesController : ApiController
{
    [Queryable]
    public IEnumerable<Entity> Get()
    {
        return m_repository.GetAll();
    }
    public HttpResponseMessage Post(Entity entity)
    {
        if (ModelState.IsValid)
        {
            m_repository.Post(entity);
            var response = Request.CreateResponse<Entity>(HttpStatusCode.Created, entity);
            return response;
        }
        return Request.CreateResponse(HttpStatusCode.BadRequest);
    }
}
但我不需要实体。我想接收字符串。所以我用下一种方式更换了控制器:

public class EntitiesController : ApiController
{
    [Queryable]
    public IEnumerable<string> Get()
    {
        return m_repository.GetAll();
    }
    public HttpResponseMessage Post(string entity)
    {
        if (ModelState.IsValid)
        {
            m_repository.Post(entity);
            var response = Request.CreateResponse<Entity>(HttpStatusCode.Created, entity);
            return response;
        }
        return Request.CreateResponse(HttpStatusCode.BadRequest);
    }
}
公共类实体控制器:ApiController
{
[可查询]
公共IEnumerable Get()
{
返回m_repository.GetAll();
}
公共httpresponsemessagepost(字符串实体)
{
if(ModelState.IsValid)
{
m_repository.Post(实体);
var response=Request.CreateResponse(HttpStatusCode.Created,entity);
返回响应;
}
返回请求.CreateResponse(HttpStatusCode.BadRequest);
}
}
我尝试了不同的
数据类型
“json”
“text”
“html”
)。和不同的
数据
表示法
$(formElement).serialize()
“简单文本”
jsonObject
JSON.stringify(jsonObject)
。但是在服务器端,我总是在
Post
操作中得到
null
作为
entity
参数


我做错了什么

您可以发布您正在与serialize一起使用的表单的HTML吗?我猜您正在选择的特定元素缺少name属性

至于AJAX请求,我倾向于使用Kyle Schaeffer的“完美AJAX请求”模板;它更具可读性,并允许更好的结果处理IMHO,至少在较旧版本的jQuery中是这样

$.ajax({
  type: 'POST',
  url: 'api/entities',
  data: { postVar1: 'theValue1', postVar2: 'theValue2' },
  beforeSend:function(){
  },
  success:function(data){
  },
  error:function(){
  }
});

请参阅:

如果要以字符串形式发布表单数据,需要做两件事:

默认情况下,Web API尝试从请求URI获取简单类型,如
int
string
等。您需要使用
FromBody
属性告诉Web API从请求正文读取值:

public HttpResponseMessage Post([FromBody]string entity)
{
   //...
}
您需要使用空键发布您的值:

$.post("api/entities", { "": $(formElement).serialize() }, "json")
    .done(function (newEntity) { self.contacts.push(newEntity); });
您可以阅读更多关于Web.API教程的文章:

试试看

$.ajax({
  type: 'POST',
  url: 'api/entities',
   traditional: true,

$.post是$.ajax的例子。这个代码对我不起作用。这个代码不是用来取代你的。这只是我如何处理ajax请求的一个示例。你能粘贴你的表单HTML吗?还有,你使用的是什么版本的jQuery?谢谢。你的文章很有用。
$.ajax({
  type: 'POST',
  url: 'api/entities',
   traditional: true,