系统.用户代码未处理ArgumentNullException
本文关键字:ArgumentNullException 未处理 代码 用户 系统 | 更新日期: 2023-09-27 18:02:33
我有以下代码在我的控制器,是保存记录到数据库使用EF。
[Route("api/abc/PostValues")]
public HttpResponseMessage PostValues(p_abc p_abc)
{
if (ModelState.IsValid)
{
db.p_abc.Add(p_abc);
db.SaveChanges();
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, p_abc);
response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = p_abc.p_abc_id }));
return response;
}
else
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
}
数据被写入db fine.
但是在下一行
response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = p_abc.p_abc_id }));
我得到以下异常
System.ArgumentNullException was unhandled by user code
HResult=-2147467261
Message=Value cannot be null.
Parameter name: uriString
Source=System
ParamName=uriString
StackTrace:
at System.Uri..ctor(String uriString)
at App.Controllers.abcController.p_abc(p_abc p_abc) in c:'xxx'abcController.cs:line 127
at lambda_method(Closure , Object , Object[] )
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)
InnerException:
请告诉我如何修复这个异常
Location响应头字段用于将接收方重定向到request - uri以外的位置,以完成请求或识别新资源。对于201个(已创建)响应,Location是由请求创建的新资源的Location。对于3xx响应,位置应该指示服务器用于自动重定向到资源的首选URI。字段值由单个绝对URI组成。
所以你必须像这样修改你的代码。在路由config.csroutes.MapRoute(
name: "Default1",
url: "api/{controller}/{id}",
defaults: new { controller = "Employees", id = UrlParameter.Optional }
);
和post方法
public class EmployeesController : ApiController
{
public HttpResponseMessage POSTEmployee(Employee employee)
{
if (ModelState.IsValid)
{
_db.Employees.Add(employee);
_db.SaveChanges();
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, employee);
response.Headers.Location = new Uri(Url.Link("Default1", new { Id = employee.Id }));
return response;
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
}
看起来你没有匹配数据的路由
你的DefaultAPI路由不存在,或者它与你传递的id不匹配。Url.Link("DefaultApi", new { id = p_abc.p_abc_id })
返回null;