编程语言
首页 > 编程语言> > C#-尝试创建Rest API时获取重复的operationid

C#-尝试创建Rest API时获取重复的operationid

作者:互联网

我已经尝试了几个小时才能解决此问题,但我不断收到错误消息:
[致命]生成客户端模型时出错:找到具有重复的operationId’recent_items’的操作对象.在API中描述的所有操作中,OperationId必须唯一.

我正在使用Visual Studio 2017
Azure SQL数据库
C#

我在下面看不到任何重复的operationid(我似乎也无法在此处对其进行整齐的格式化-非常抱歉!)

{
    "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;
    }
}

解决方法:

最后,我不得不回去删除模型和控制器中的所有下划线“ _”.

我从数据库表名和字段中删除了它们,以防万一.我不确定是否需要这样做.

那真是令人沮丧,浪费了整个下午的美好时光.

希望这对其他人有帮助.

标签:swagger-2-0,azure,rest,c,asp-net-mvc
来源: https://codeday.me/bug/20191025/1931712.html