2014-05-02 70 views
0

我已經使用WebApi OData創建了一個簡單的CRUD應用程序。我一直在使用Fiddler 2的Composer選項卡來測試服務,無論我做什麼,我都會從本地IIS服務器獲取HTTP 404響應。如前所述一個POST要求工作:WebApi OData只能夠POST和GET實體

http://mymachine/Service.Facade.Reports/odata/Reports

的User-Agent:提琴手

內容類型:應用程序/ JSON

主機:本地主機

的Content-Length :1373

{ 「名稱」: 「報告......」, 「集團」: 「Hhowd444」, 「ReportLayoutID」:8270, 「DatabaseInstanceID」:1042 }

所以,我想:

然而,網址更改爲:> http://mymachine/Service.Facade.Reports/odata/Reports(8270)和 執行PUT不起作用

的PUT導致404錯誤。我嘗試調試和跟蹤服務,導致無處。

在WebApiConfig類:

public static void Register(HttpConfiguration config) 
{ 
    ODataModelBuilder builder = new ODataConventionModelBuilder(); 
    builder.EntitySet<ReportLayout>("Reports"); 
    builder.EntitySet<ReportLayoutData>("ReportLayoutData"); 
    builder.EntitySet<DatabaseInstance>("DataSources"); 
    builder.EntitySet<DataSourceObject>("DataSourceObject"); 

    config.Routes.MapODataRoute("odata", "odata", builder.GetEdmModel()); 

    config.MapHttpAttributeRoutes(); 

    config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{key}", 
     defaults: new { key = RouteParameter.Optional } 
    ); 
} 

崗位和從控制器認沽:

public async Task<IHttpActionResult> Post(ReportLayout reportlayout) 
{ 
    if (!ModelState.IsValid) 
    { 
     return BadRequest(ModelState); 
    } 

    db.Reports.Add(reportlayout); 
    db.ReportsData.AddRange(reportlayout.LayoutData); 
    await db.SaveChangesAsync(); 

    return Created(reportlayout); 
} 

public async Task<IHttpActionResult> Put([FromODataUri] int key, ReportLayout reportlayout) 
{ 
    if (!ModelState.IsValid) 
    { 
     return BadRequest(ModelState); 
    } 

    if (key != reportlayout.ReportLayoutID) 
    { 
     return BadRequest(); 
    } 

    db.Entry(reportlayout).State = EntityState.Modified; 

    try 
    { 
     await db.SaveChangesAsync(); 
    } 
    catch (DbUpdateConcurrencyException) 
    { 
     if (!ReportLayoutExists(key)) 
     { 
      return NotFound(); 
     } 
     else 
     { 
      throw; 
     } 
    } 

    return Updated(reportlayout); 
} 

回答

0

最終的代碼不是問題,但我的IIS 7.5服務器的配置。

要解決去:

  1. IIS管理器
  2. 處理程序映射
  3. 找到ExpresslessUrlHandler ...條目×3
  4. 點擊右鍵,編輯
  5. 選擇請求限制
  6. 點擊動詞選項卡
  7. 要麼添加額外的動詞或者強制t選擇所有動詞

現在所有的東西都經過一些痛苦和痛苦之後,