- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 WEB API Controller 中,我们可以使用相同的方法名称和不同的 HTTP 动词吗?
[HttpGet]
public string Test()
{
return "Success Get";
}
[HttpPost]
public string Test(int i)
{
return "Success Post";
}
Swagger 不接受这种配置。访问 API 方法时出现此错误:
500 : "Message":"An error has occurred.","ExceptionMessage":"Not supported by Swagger 2.0: Multiple operations with path 'api/Common' and method 'POST'. See the config setting - \"ResolveConflictingActions\" for a potential workaround"
这是我的路由配置
:
config.Routes.MapHttpRoute(
name: "DefaultApiByName",
routeTemplate: "api/{controller}/{action}/{name}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApiByAction",
routeTemplate: "api/{controller}/{action}"
);
config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new { id=RouteParameter.Optional});
最佳答案
方法名称本身对 Swagger 无关紧要,路由才是。当 Swagger 检测到可能存在歧义的路由时,它会因该错误而崩溃。歧义路由是返回不止一种资源的单个路由(基本 uri)。出于某些疯狂的原因,Microsoft Web Api 允许您为相同的 URI 返回不同的资源,这就是您遇到试图使用您的 API(和 Swagger)的人的麻烦的地方。
单个 URI 应该代表单个资源。
正确方法:
错误的方式:
Microsoft Web Api 允许您使用多种方法处理单个路由,因此您冒着意外创建不明确路由的严重风险。
破坏 Swagger 的代码示例:
[HttpGet, Route("apples")]
public HttpResponseMessage GetApples()
{
return _productRepository.Get(id);
}
[HttpGet, Route("apples")]
pblic HttpResponseMessage GetApples([FromUri]string foo)
{
return new DumpTruck(); // Say WHAAAAAAT?!
}
许多 Swagger 框架在运行时扫描您的代码并创建 Swagger 2.0 JSON 文档。 Swagger UI 请求该 JSON 文档并基于该文档构建您看到的 UI。
现在,由于 Swagger 框架正在扫描您的代码以构建 JSON,如果它发现两个表示返回不同类型的单个资源的方法,它就会中断。发生这种情况是因为 Swagger 不知道如何表示该 URI,因为它是不明确的。
您可以采取以下措施来帮助解决此问题:
如果您必须表示具有不同类型的单个路由(通常是一个坏主意),那么您可以通过将以下属性添加到有问题的方法中来忽略使文档不明确的路由
[ApiExplorerSettings(IgnoreApi = true)]
这将告诉文档在记录 API 时完全忽略此方法,Swagger 将呈现。请记住,如果您使用的是 #2,那么 Swagger 将不会呈现此方法,这可能会给使用您的 API 的人带来问题。
希望这对您有所帮助。
关于c# - 网络 API : Same Method with different HTTP Verbs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35000024/
我正在研究来自 wiki.commonjs.org 的异步模块定义我想知道这段代码的含义是什么。 特别是,我的问题是: return beta.verb();和return require("beta
我正在开发 XeroAPI,这是我实习期间交给我的一项任务。我不熟悉 OAuth,而且在编程方面我几乎是个新手。现在,我设法使用 Ashley Schroder 的关于使用 java 访问公共(pub
这个 var psi = new ProcessStartInfo("cmd") { Verb = "runas",
以下表达式显示了 16 个基本 bool 运算中每一个的真值表: (0 b./; 1 b./; 2 b./; 3 b./; 4 b./; 5 b./; 6 b./; 7 b./; 8 b./;
在 LaTex 中,如果我使用 \动词 ,我怎么逃脱| ?例如,我想显示 ab|bc :\动词|ab []公元前|。用什么代替[] ? 最佳答案 您可以在 \verb 中使用其他字符比| ;例如,你可
全新的 Powershell,使用 Windows 10 上的默认安装。 在我的系统上,运行 Get-Verb给我: > Get-Verb un*
我看到 HTTP 方法通常称为 Verbs。 (我知道正确的名称是方法来自:https://www.rfc-editor.org/rfc/rfc7231) 这个名字从何而来? 最佳答案 Method
我正在使用 ShellExecuteW 启动一个批处理文件。代码看起来有点像这样: ShellExecuteW(GetDesktopWindow(), wide_verb.c_str(), wide_
我正在寻找一种方法来将 API 封装在基于 PHP 的 Web 应用程序、数据库和 CMS 中的默认函数中。 我环顾四周,发现了几个“骨架”框架。除了我的问题中的答案,还有Tonic ,我喜欢的 RE
为了在 powershell (V7) 脚本中使用类,似乎有必要声明模块,在其中实现类(Powershell 语言),通过 using module .\MyModule.psm1 模块“MyModu
我正在使用带有@PreAuthorize的自定义访问检查器: @RestController @RequestMapping("/users") public class Users { @P
在docs对于这个属性,什么都没说,那么这个属性到底有什么作用呢? 最佳答案 引用Routing to controller actions in ASP.NET Core : Route Name
有没有什么方法可以使用 ShellExecute 的 Properties Verb 打开属性中的特定选项卡? 有没有办法做到这一点? (不必是 ShellExecute,但找不到太多可以显示文件“属
我有一个场景,在这个场景中,我有 REST API 来管理一个我们称之为 Group 的资源。一个组包含成员并且组资源是动态的 - 无论何时检索它,您都会获得最新的数据(因此查询必须运行服务器端以更新
在 WEB API Controller 中,我们可以使用相同的方法名称和不同的 HTTP 动词吗? [HttpGet] public string Test()
当我打开 verb.exc 时,我可以看到 saw see 虽然我在代码中使用词形还原 >>>print lmtzr.lemmatize('saw', 'v') saw 这怎么会发生?我对修改 wor
我想对这段文字进行词形还原,它只是对名词进行词形还原,我还需要对动词进行词形还原 >>> import nltk, re, string >>> from nltk.stem impo
运行 R 4.0.2 和 dplyr 1.0.2 我正在尝试使用 n = n()在对 srvyr 对象的总结调用中: relduration_by_age_grp % filter(ongoing
我正在编写 vue.js 教程,发布于 https://scotch.io/tutorials/how-to-handle-file-uploads-in-vue-2我正在尝试修改上传网站以使用 Mi
我想更新 Azure 上 Blob 存储中的 json 文件,而 WebClient.uploadData(url,data) 它给出错误: The remote server returned an
我是一名优秀的程序员,十分优秀!