Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 如何在ASP.NET core 3.1中创建可以返回不同错误返回代码的控制器方法_Asp.net Core - Fatal编程技术网

Asp.net core 如何在ASP.NET core 3.1中创建可以返回不同错误返回代码的控制器方法

Asp.net core 如何在ASP.NET core 3.1中创建可以返回不同错误返回代码的控制器方法,asp.net-core,Asp.net Core,我需要根据返回对象(结果)返回不同的httpstatus代码。如果是Failure,Error属性将保存由错误代码和我的服务提供的消息组成的序列化信息。 我有以下控制器方法: [HttpPost] public ActionResult<BasicItemDTO> CreateValue(BasicIItemCreationDTO value) { Result<BasicItemDTO> res = ValuesService.Creat

我需要根据返回对象(结果)返回不同的httpstatus代码。如果是Failure,Error属性将保存由错误代码和我的服务提供的消息组成的序列化信息。 我有以下控制器方法:

[HttpPost]
    public ActionResult<BasicItemDTO> CreateValue(BasicIItemCreationDTO value)
    {
        Result<BasicItemDTO> res = ValuesService.CreateValue(value);
        if (res.IsFailure) return ErrorFromResult(res.Error);
        ActionResult<BasicItemDTO> response = CreatedAtRoute("GetValue", res.Value);
        return  response;
    }

我正在努力解决ErrorFromResult上的返回类型。ErrorFromResult的返回类型应该是什么?

因为这是一个API,所以将
CreateValue
的返回类型更改为
IActionResult
,并用状态代码或
Json
将响应包装如下:

[HttpPost]
public IActionResult CreateValue(BasicIItemCreationDTO value)
{
  Result<BasicItemDTO> res = ValuesService.CreateValue(value);
  if (res.IsFailure) return ErrorFromResult(res.Error);
  //ActionResult<BasicItemDTO> response = CreatedAtRoute("GetValue", res.Value);
  var url = Url.RouteUrl("route_name", route_values)
  return Created(url, the created value);
}
[HttpPost]
公共IActionResult CreateValue(基本项CreationTo值)
{
Result res=ValuesService.CreateValue(值);
if(res.IsFailure)返回ErrorFromResult(res.Error);
//ActionResult响应=CreatedAtRoute(“GetValue”,res.Value);
var url=url.RouteUrl(“路由名称”,路由值)
创建的返回(url,创建的值);
}

您需要在switch语句中添加一个default标签。如果未执行上述情况,将执行默认标签

switch (ErrorCode)
{
    case "Conflict":
        ProblemDetails PD = GenerateResponse(ErrorDetail);
        return Conflict(PD);
    case "NotFound":
        return NotFound(ErrorDetail);
    default:
        return BadRequest(ErrorDetail);
}

此外,正如@HMZ所说,您可以将
CreateValue
的返回类型更改为
IActionResult
,使其与
ErrorFromResult
的返回类型相同。好的,我已经解决了。如果我对CreateValue方法使用IActionResult,errorFromResult部分工作正常,但由于CreatedAtRoute的返回类型未转换为IActionResult,因此不会编译快乐路径。您需要使用CreateAtRoute的3个参数实现。下面的代码按预期编译和运行

 [HttpPost]
    public IActionResult CreateValue(BasicIItemCreationDTO value)
    {
        Result<BasicItemDTO> res = ValuesService.CreateValue(value);
        if (res.IsFailure) return ErrorFromResult(res.Error);
        IActionResult response = CreatedAtRoute("GetValue",new {ValueId= res.Value.Id },res.Value);
        return  response;
    }
[HttpPost]
公共IActionResult CreateValue(基本项CreationTo值)
{
Result res=ValuesService.CreateValue(值);
if(res.IsFailure)返回ErrorFromResult(res.Error);
IActionResult response=CreatedAtRoute(“GetValue”,新的{ValueId=res.Value.Id},res.Value);
返回响应;
}

感谢您提供有关交换机默认设置的提示。为了简洁起见,我省略了它,因为它与问题没有直接关系。

返回的
IActionResult
是否给您带来任何错误?
 [HttpPost]
    public IActionResult CreateValue(BasicIItemCreationDTO value)
    {
        Result<BasicItemDTO> res = ValuesService.CreateValue(value);
        if (res.IsFailure) return ErrorFromResult(res.Error);
        IActionResult response = CreatedAtRoute("GetValue",new {ValueId= res.Value.Id },res.Value);
        return  response;
    }