Asp.net mvc 在RESTWebAPI调用中返回复杂对象
我有一个Web API POST方法,它将自定义复杂对象Asp.net mvc 在RESTWebAPI调用中返回复杂对象,asp.net-mvc,rest,asp.net-web-api,Asp.net Mvc,Rest,Asp.net Web Api,我有一个Web API POST方法,它将自定义复杂对象MyObjectRequest作为参数,并返回自定义复杂对象MyObjectResponse。MyObjectResponse对象将自定义复杂对象标记作为属性 public class MyObjectRequest { public string AppName { get; set; } public string Username { get; set; } public string Password { get;
MyObjectRequest
作为参数,并返回自定义复杂对象MyObjectResponse
。MyObjectResponse
对象将自定义复杂对象标记作为属性
public class MyObjectRequest
{
public string AppName { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string AppIdentifier { get; set; }
}
public class MyObjectResponse
{
public bool Authenticated { get; set; }
public Token AccessToken { get; set; }
}
public class Token
{
public string Id { get; set; }
public string ExpirationDate { get; set; }
}
我有一个Web API控制器,当用户进行HTTP POST调用时,我想返回MyObjectResponse
public class MyCustomController : Controller
{
public MyObjectResponse Post([FromBody] MyObjectRequest request)
{
//do my work here
}
}
这是制作myMyCustomController
API签名的正确方法吗?是的,这是一个非常好的API签名,您拥有的当然可以工作。我倾向于将这些对象包装在HttpResponseMessage
中,如下所示:
[HttpPost]
public HttpResponseMessage Post([FromBody] MyObjectRequest request)
{
if (ModelState.IsValid) // and if you have any other checks
{
var myObjectResponse = new MyObjectResponse();
// In your case, this will be result of some service method. Then...
return Request.CreateResponse(HttpStatusCode.Created, myObjectResponse);
}
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
[HttpPut]
public HttpResponseMessage Update([FromBody] UserModel userModel)
{
if (ModelState.IsValid)
{
var myObjectResponse = new MyObjectResponse();
// In your case, this will be result of some service method. Then...
return Request.CreateResponse(HttpStatusCode.Accepted);
}
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
[HttpGet]
public HttpResponseMessage Get(int id)
{
var myObjectResponse = GetObjectFromDb(id);
// In your case, this will be result of some service method. Then...
if(myObjectResponse == null)
return Request.CreateResponse(HttpStatusCode.NotFound);
return Request.CreateResponse(HttpStatusCode.OK, myObjectResponse);
}
这样,客户机就可以查看状态代码并决定如何处理响应,而无需实际尝试对其进行反序列化。您可以在获取有关HttpStatusCodes的更多信息
他们在WebApi2中添加了更多方法,如ApiController.Ok
。要了解更多信息,您可以看看这个 谢谢。这在iOS和Android环境下是否可行。计划从移动应用程序中使用它。它应该。WebAPI的优点是基于请求头中的内容类型进行内容协商。这意味着您可以将其作为JSON、XML或客户端所需的任何其他标准格式进行请求。