我已經使用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);
}