尝试创建rest api

时间:2017-07-19 18:15:06

标签: c# asp.net-mvc rest azure swagger-2.0

我已经尝试了几个小时来解决这个问题,我一直收到错误: [致命]生成客户端模型时出错:找到具有重复operationId' recent_items'的操作对象。在API中描述的所有操作中,OperationId必须是唯一的。

我正在使用2017年的视觉工作室 Azure SQL数据库 C#

我在下面看不到任何重复的操作ID(我也似乎无法在这里整齐地格式化 - 非常抱歉!)

{
    "swagger": "2.0",
    "info": {
        "version": "v1",
        "title": "azure_items_API"
    },
    "host": "azureitemsapi20170719125618.azurewebsites.net",
    "schemes": ["http"],
    "paths": {
        "/api/recent_items": {
            "get": {
                "tags": ["recent_items"],
                "operationId": "recent_items_GetAllrecent_items",
                "consumes": [],
                "produces": ["application/json",
                "text/json",
                "application/xml",
                "text/xml"],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/recent_items"
                            }
                        }
                    }
                },
                "deprecated": false
            },
            "post": {
                "tags": ["recent_items"],
                "operationId": "recent_items_Postrecent_items",
                "consumes": ["application/json",
                "text/json",
                "application/xml",
                "text/xml",
                "application/x-www-form-urlencoded"],
                "produces": ["application/json",
                "text/json",
                "application/xml",
                "text/xml"],
                "parameters": [{
                    "name": "recent_items",
                    "in": "body",
                    "required": true,
                    "schema": {
                        "$ref": "#/definitions/recent_items"
                    }
                }],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/recent_items"
                        }
                    }
                },
                "deprecated": false
            }
        },
        "/api/recent_items/{id}": {
            "get": {
                "tags": ["recent_items"],
                "operationId": "recent_items_Getrecent_items",
                "consumes": [],
                "produces": ["application/json",
                "text/json",
                "application/xml",
                "text/xml"],
                "parameters": [{
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "type": "integer",
                    "format": "int32"
                }],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/recent_items"
                        }
                    }
                },
                "deprecated": false
            },
            "put": {
                "tags": ["recent_items"],
                "operationId": "recent_items_Putrecent_items",
                "consumes": ["application/json",
                "text/json",
                "application/xml",
                "text/xml",
                "application/x-www-form-urlencoded"],
                "produces": [],
                "parameters": [{
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "type": "integer",
                    "format": "int32"
                },
                {
                    "name": "recent_items",
                    "in": "body",
                    "required": true,
                    "schema": {
                        "$ref": "#/definitions/recent_items"
                    }
                }],
                "responses": {
                    "204": {
                        "description": "No Content"
                    }
                },
                "deprecated": false
            },
            "delete": {
                "tags": ["recent_items"],
                "operationId": "recent_items_Deleterecent_items",
                "consumes": [],
                "produces": ["application/json",
                "text/json",
                "application/xml",
                "text/xml"],
                "parameters": [{
                    "name": "id",
                    "in": "path",
                    "required": true,
                    "type": "integer",
                    "format": "int32"
                }],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/recent_items"
                        }
                    }
                },
                "deprecated": false
            }
        }
    },
    "definitions": {
        "recent_items": {
            "type": "object",
            "properties": {
                "id": {
                    "format": "int32",
                    "type": "integer"
                },
                "item_number": {
                    "type": "string"
                },
                "stop_name": {
                    "type": "string"
                },
                "stop_address1": {
                    "type": "string"
                }
            }
        }
    }
}

它确实有重复的get但是我将它们改为控制器中的getAll。这是完整的控制器:

 public class recent_itemsController : ApiController
{
    private first_choice_itemsEntities db = new first_choice_itemsEntities();

    // GET: api/recent_items
    public IQueryable<recent_items> GetAllrecent_items()
    {
        return db.recent_items;
    }

    // GET: api/recent_items/5
    [ResponseType(typeof(recent_items))]
    public IHttpActionResult Getrecent_items(int id)
    {
        recent_items recent_items = db.recent_items.Find(id);
        if (recent_items == null)
        {
            return NotFound();
        }

        return Ok(recent_items);
    }

    // PUT: api/recent_items/5
    [ResponseType(typeof(void))]
    public IHttpActionResult Putrecent_items(int id, recent_items recent_items)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        if (id != recent_items.id)
        {
            return BadRequest();
        }

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

        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!recent_itemsExists(id))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return StatusCode(HttpStatusCode.NoContent);
    }

    // POST: api/recent_items
    [ResponseType(typeof(recent_items))]
    public IHttpActionResult Postrecent_items(recent_items recent_items)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        db.recent_items.Add(recent_items);
        db.SaveChanges();

        return CreatedAtRoute("DefaultApi", new { id = recent_items.id }, recent_items);
    }

    // DELETE: api/recent_items/5
    [ResponseType(typeof(recent_items))]
    public IHttpActionResult Deleterecent_items(int id)
    {
        recent_items recent_items = db.recent_items.Find(id);
        if (recent_items == null)
        {
            return NotFound();
        }

        db.recent_items.Remove(recent_items);
        db.SaveChanges();

        return Ok(recent_items);
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            db.Dispose();
        }
        base.Dispose(disposing);
    }

    private bool recent_itemsExists(int id)
    {
        return db.recent_items.Count(e => e.id == id) > 0;
    }
}

1 个答案:

答案 0 :(得分:4)

我最终不得不返回并删除我的模型和控制器中的每个下划线'_'。

我在数据库表名和字段中删除了它们以便进行测量......我不确定是否需要它。

这是非常令人沮丧的,浪费了大部分时间是一个美好的下午。

希望这有助于其他人。