当前位置: 首页 > 知识库问答 >
问题:

aspnet-api-versioning:为什么api在调用api时提供了错误的api版本而返回200(ok)

解晟睿
2023-03-14

下面是使用的NuGet版本。

PackageReference include=“Microsoft.aspnetcore.mvc.versioning”version=“2.3.0”PackageReference include=“Microsoft.aspnetcore.mvc.versioning.apiexplorer”version=“2.2.0”PackageReference include=“swashbuckle.aspnetcore”version=“3.0.0”

startup.cs

 services.AddApiVersioning(o =>
            {
                o.ReportApiVersions = true;
                o.DefaultApiVersion = new Microsoft.AspNetCore.Mvc.ApiVersion(1, 0);
                o.AssumeDefaultVersionWhenUnspecified = true;
             o.ErrorResponses = new DefaultErrorResponseProvider();
            });
   [ApiVersion("2.0")]
        [ApiController]
        [Route("api/v{version:apiVersion}/[Controller]")]
        public class DemoTest : ControllerBase
        {
            [HttpGet]
            public IActionResult Get()
            {
                return new JsonResult(new { ResourceName = "DemoTestAPIController Version 2" });
            }
        }

http://localhost:53858/api/v2.0/demotest(此URL有效,响应应为200,并且按预期工作)

http://localhost:53858/api/v3.0/demotest

services.AddApiVersioning(o =>
            {
                o.ReportApiVersions = true;
                o.DefaultApiVersion = new Microsoft.AspNetCore.Mvc.ApiVersion(1, 0);
                o.AssumeDefaultVersionWhenUnspecified = true;
             o.ErrorResponses = new MyErrorResponseProvider();
            });

MyerrorResponseProvider

class MyErrorResponseProvider : DefaultErrorResponseProvider
{
// note: in Web API the response type is HttpResponseMessage
public override IActionResult CreateResponse( ErrorResponseContext context )
{
       html" target="_blank">switch ( context.ErrorCode )
       {
           case "UnsupportedApiVersion":
               context = new ErrorResponseContext(
                   context.Request,
                   context.StatusCode,
                   context.ErrorCode,
                   "My custom error message.",
                   context.MessageDetail );
               break;
       }

       return base.CreateResponse( context );
}
}

共有1个答案

秦禄
2023-03-14

下面的代码为我工作

我使用的是3.1.6版本

<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="3.1.6" />

我的Startup.cs

public void ConfigureServices(IServiceCollection services)
        {
            services.AddApiVersioning(options =>
            {
                options.ReportApiVersions = true;
                options.AssumeDefaultVersionWhenUnspecified = true;
                options.DefaultApiVersion = new ApiVersion(1, 0);
            });
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }

我的控制器

[ApiVersion("1.0")]
[ApiExplorerSettings(GroupName = "v1")]
[Route("api/v{version:apiVersion}/[controller]")]
[ApiController]
public class ValuesController : ControllerBase

如果我尝试使用v2,我将得到这个错误

error: {
  code: "UnsupportedApiVersion",
  message: "The HTTP resource that matches the request URI 'http://localhost:61273/api/v2/values' does not support the API version '2'.",
  innerError: null
}
 类似资料:
  • GetFolder操作给了我同样的结果。 此错误通常由未经许可的邮箱帐户引起。但我的所有用户都有活跃的Exchange许可证。为什么我会得到这样的ErrorNonExistentMailbox错误响应?

  • 我正在尝试进行rest api调用,但一直收到。从日志中可以看出,我的POJO的字段之一似乎存在问题。 我的POJO: 在我的中 运行上述代码时,我得到以下错误:

  • 我公开了一个。NET API,运行在IIS服务器上。有一个每晚执行的Windows计划任务。它运行一个cURL请求。当我复制该命令并在cmd窗口中执行它时,它返回401。 我在Postman中尝试了相同的api调用,得到了200。 IIS日志显示: cUrl命令和Postman实例都在服务器上运行。运行API的同一台。我是不是错过了邮递员做的事情,我需要让卷毛做的事情?

  • 问题内容: 编辑:在这段代码上发生错误: 我正在使用Node js的gmail api。当我阅读他们的快速入门指南时,我会不断收到此错误。 https://developers.google.com/gmail/api/quickstart/nodejs 请记住,我使用电子邮件地址进行了快速入门,一切都很好。完全没有错误。我决定为测试目的创建一个虚拟电子邮件。我所做的唯一更改是关闭了文件以保留新的

  • Versioning Scrapy uses the odd-numbered versions for development releases. There are 3 numbers in a Scrapy version: A.B.C A is the major version. This will rarely change and will signify very large ch

  • 我在Spring中有REST API作为后端,Angular 2作为前端。