将字符串从javascript代码发布到服务器上的ApiController
我开始玩ASP.NETWebAPI。当我在控件中获得实体时,我想知道序列化功能,如下一步:将字符串从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
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,