我使用WebApi OData创建了一个简单的CRUD应用程序。我一直在使用Fiddler 2的Composer选项卡来测试服务,无论我做什么,我都会从本地IIS服务器获得HTTP 404响应。如上所述, POST 请求有效:
http://mymachine/Service.Facade.Reports/odata/Reports
User-Agent:Fiddler
Content-Type:application / json
主持人:localhost
内容长度: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 :(得分:0)
最后,代码不是问题,而是我的IIS 7.5服务器的配置。
要解决,请转到:
在经历了一些痛苦和痛苦之后,一切都在发挥作用!