如何从前端 React.js 处理 ASP.NET Core web API 中的 "undefined" 或 "null"?

How to handle "undefined" or "null" in ASP.NET Core web API from frontend React.js?

我正在编写 ASP.NET Core REST API。这是控制器方法,当传入路由匹配时,此方法应该 selected。

controller.cs

[HttpGet]
        [Route("/api/Account/{accountID}/{productIds}/files")]
        public ActionResult<IEnumerable<FilesDto>> GetFiles(long accountID, string productIds)
        {
            using (new MethodCallLogger(logger, UserContext))
            {
                return Ok(FilesService.GetFiles(accountID, productIds));
            }
        }

FilesService.cs

public IEnumerable<FilesDto> GetFiles(long accountID, string productIds)
{
// in some cases productIds will come empty

if(!string.isNullorEmpty(productIds)
{

}
}

在某些情况下,select 所有产品的 productIds 都会变空。

如果我从 FrontEnd Reactjs 传递 null 或空字符串,这里它接收“null”或“undefined”作为字符串值。所以 string.isNullorEmpty 条件通过并抛出错误,例如无效的 produtIDs。

那么,什么是处理这个“null”或“undefined”的完美方法。或者我们如何将空字符串或 null 从 reactjs 传递到后端。

感谢您的宝贵时间。

创建 NotFoundApiException

public class NotFoundApiException : Exception
{
    public NotFoundApiException(string message) : base(message) { }

    public NotFoundApiException(string message, params object[] args)
        : base(String.Format(CultureInfo.CurrentCulture, message, args))
    {
    }
}

创建自定义错误处理中间件

public class ErrorHandlerMiddleware
{
    private readonly RequestDelegate _next;

    public ErrorHandlerMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        try
        {
            await _next(context);
        }
        catch (Exception error)
        {
            var response = context.Response;
            response.ContentType = "application/json";
            
            string erorMessage = error.Message;

            switch (error)
            {

                case NotFoundApiException e:
                    // custom not-found application error
                    errorMessage = e.Message;
                    response.StatusCode = (int)HttpStatusCode.NotFound;
                    break;

                default:
                    // unhandled error
                    response.StatusCode = (int)HttpStatusCode.InternalServerError;
                    break;
            }

            var result = JsonConvert.SerializeObject(new
            {
                message = errorMessage
            });

            await response.WriteAsync(result);
        }
    }
}

然后使用Startup/Program.cs中的中间件:

app.UseMiddleware<ErrorHandlerMiddleware>();

然后在值为 null 时简单地抛出这个异常:


if(value is null)
    throw new NotFoundApiException("Data is null")

您可以在 productIds 中使用“全部”,例如:

/api/Account/55/all/files

或者您也可以更改 api 的结构,例如:

/api/Account/files/{accountID}/{productIds}

productIds可以是"all"Number

或者您可以对 productIds 使用 queryParams,例如:

/api/Account/{accountID}/files?productIds=编号

例如:

/api/Account/20/files?productIds=4

productIds 未发送时,您发送特定帐户 ID

的所有文件

1./api/Account/20/文件

2./api/Account/20/files?productIds=all