有没有一种方法可以扩展IActionResult,以便所有控制器方法都可以返回相同的响应对象(例如:CommonActionResult), HttpResponseCode,消息和响应对象(例如:ObjectOne,ObjectTwo基于启动的方法)?
[HttpGet]
public ActionResult<ObjectOne> Get(string id)
{
}
[HttpGet]
public ActionResult<ObjectTwo> Get(string name)
{
}
[HttpPost]
public IActionResult Post(AppPost app)
{
}
我该如何扩展?
public class CommonActionResult : IActionResult
{
}
答案 0 :(得分:0)
如果只需要通用返回类型,请使用function res = binary_multiplication(a,b)
nstep = numel(b) ;
mat = [zeros( nstep , nstep ) , bsxfun( @times , flipud(b.') , a) ] ;
for k=2:nstep
mat(k,:) = circshift(mat(k,:),[0,-(k-1)]) ;
end
sumline = sum(mat) ;
res = mod(sumline+circshift(floor(sumline/2)+circshift(floor(sumline/2),[0,-1]),[0,-1]),2) ;
。这将接受任何操作结果类型,例如IActionResult
,OkResult
,OkObjectResult
,BadRequestResult
等。
NotFoundResult
只是将对象包装在结果中的助手,使您可以直接返回对象,而不必先将其包装在结果中(即ActionResult<T>
与return obj
但是,在使用该类型时,必须返回该特定的对象类型:传递到return Ok(obj)
泛型类型参数中的类型。如果需要返回不同的类型,则使用T
作为返回值您的方法签名,然后将对象包装在类似IActionResult
的地方。
Ok
答案 1 :(得分:0)
您可以根据自己的要求实现IHttpAction
这是一个简单的示例:
public class CustomResult<T> : IHttpActionResult
{
private readonly HttpRequestMessage _request;
private readonly T _content;
public CustomResult(HttpRequestMessage request, T content)
{
_request = request;
_content = content;
}
public CustomResult(HttpRequestMessage request)
{
_request = request;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
if (_content==null)
{
var response =_request.CreateResponse(HttpStatusCode.NoContent, JsonMediaTypeFormatter.DefaultMediaType);
}else
{
var jsonData = JsonConvert.SerializeObject(_content, _content.GetType(), new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Formatting = Formatting.Indented
});
var response = _request.CreateResponse(HttpStatusCode.OK, jsonData, JsonMediaTypeFormatter.DefaultMediaType);
response.Content = new StringContent(jsonData, Encoding.UTF8, "application/json");
}
return Task.FromResult(response);
}
}
您还可以在响应标题中添加其他信息,请查看此示例以获取更多信息