2014-05-09 88 views
0

我在我的控制器中使用EF將記錄保存到數據庫中的代碼如下。System.ArgumentNullException被用戶代碼未處理

[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); 
    } 
} 

數據寫入數據庫罰款。
但在下面一行

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: 

請讓我知道如何像你有沒有路由相匹配的數據修復此異常

+0

你能確認你有你'WebApiConfig.cs'爲'DefaultApi'條目?它應該看起來像這樣:'config.Routes.MapHttpRoute(「DefaultApi」,「...' – McCee

回答

0

位置響應頭字段用於將接收方重定向到Request-URI以外的位置,以完成請求或識別新資源。對於201(已創建)響應,該位置是由請求創建的新資源的位置。對於3xx響應,位置應該指出服務器首選的URI,以便自動重定向到資源。字段值由一個絕對URI組成。

所以你必須像這樣改變你的代碼。 在路線config.cs

routes.MapRoute(
     name: "Default1", 
     url: "api/{controller}/{id}", 
     defaults: new { controller = "Employees", id = UrlParameter.Optional } 
    ); 

,並在您的文章的方法

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); 
     } 
    } 
} 
0

看起來。

您的DefaultAPI路由不存在,或者它與您傳遞的ID不匹配。 因此下面的代碼:Url.Link("DefaultApi", new { id = p_abc.p_abc_id })返回null;

相關問題