系统.用户代码未处理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: 

请告诉我如何修复这个异常

系统.用户代码未处理ArgumentNullException

Location响应头字段用于将接收方重定向到request - uri以外的位置,以完成请求或识别新资源。对于201个(已创建)响应,Location是由请求创建的新资源的Location。对于3xx响应,位置应该指示服务器用于自动重定向到资源的首选URI。字段值由单个绝对URI组成。

所以你必须像这样修改你的代码。在路由config.cs
routes.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;

相关文章:
  • 没有找到相关文章