如何从前端 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
我正在编写 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