Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebApi OData只能发布和获取实体_C#_Asp.net Web Api - Fatal编程技术网

C# WebApi OData只能发布和获取实体

C# WebApi OData只能发布和获取实体,c#,asp.net-web-api,C#,Asp.net Web Api,我使用WebApi OData创建了一个简单的CRUD应用程序。我一直在使用Fiddler 2的Composer选项卡来测试该服务,无论我做什么,我都会从本地IIS服务器获得HTTP 404响应。如前所述,POST请求有效: http://mymachine/Service.Facade.Reports/odata/Reports 用户代理:Fiddler 内容类型:application/json 主机:本地主机 内容长度:1373 { “名称”:“报告…”,“组”:“Hhowd444”,“报

我使用WebApi OData创建了一个简单的CRUD应用程序。我一直在使用Fiddler 2的Composer选项卡来测试该服务,无论我做什么,我都会从本地IIS服务器获得HTTP 404响应。如前所述,POST请求有效:

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

用户代理:Fiddler

内容类型:application/json

主机:本地主机

内容长度:1373

{ “名称”:“报告…”,“组”:“Hhowd444”,“报告布局ID”:8270,“数据库实例ID”:1042 }

所以我试着:

但是,将URL更改为:>
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 }
    );
}
公共静态无效寄存器(HttpConfiguration配置)
{
ODataModelBuilder=新ODataConventionModelBuilder();
建筑商实体集(“报告”);
builder.EntitySet(“ReportLayoutData”);
builder.EntitySet(“数据源”);
builder.EntitySet(“数据源对象”);
config.Routes.MapODataRoute(“odata”,“odata”,builder.GetEdmModel());
config.maphttpAttribute路由();
config.Routes.MapHttpRoute(
名称:“DefaultApi”,
routeTemplate:“api/{controller}/{key}”,
默认值:新建{key=RouteParameter.Optional}
);
}
控制器的Post和Put:

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);
}
公共异步任务发布(ReportLayout ReportLayout)
{
如果(!ModelState.IsValid)
{
返回请求(ModelState);
}
db.Reports.Add(reportlayout);
db.ReportsData.AddRange(reportlayout.LayoutData);
等待db.saveChangesSync();
创建的返回(reportlayout);
}
公共异步任务Put([FromODataUri]int键,ReportLayout ReportLayout)
{
如果(!ModelState.IsValid)
{
返回请求(ModelState);
}
if(key!=reportlayout.ReportLayoutID)
{
返回请求();
}
db.Entry(reportlayout).State=EntityState.Modified;
尝试
{
等待db.saveChangesSync();
}
catch(DbUpdateConcurrencyException)
{
如果(!ReportLayoutExists(键))
{
返回NotFound();
}
其他的
{
投
}
}
返回更新(报告布局);
}

最后,问题不在于代码,而在于我的IIS 7.5服务器的配置

要解决此问题,请转到:

  • IIS管理器
  • 处理程序映射
  • 查找ExpressleSurlHandler…条目x 3
  • 右键单击,编辑
  • 选择请求限制
  • 点击动词标签
  • 添加额外的动词或仅选择所有动词
  • 在经历了一些痛苦和折磨之后,现在一切都正常了