尝试创建 REST API 时获取重复的操作 ID



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

我正在使用Visual Studio 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;
}
}

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

我在数据库表名称和字段中删除了它们,以便更好地衡量......我不确定是否需要这样做。

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

希望这对其他人有所帮助。

最新更新