小编Luk*_*kas的帖子

带有 Swagger 文档的可选 WebAPI 路由参数

我有一个在属性中定义路由的 WebAPI 方法,具有一个必需参数和一个可选参数:

    [HttpGet]
    [Route("api/ChargeCard/{cif}/{feeScheme=null}")]
    [ResponseType(typeof(ChargeCardRoot))]
    public IHttpActionResult Get(string cif, string feeScheme, ChargeCardRequestMode mode = ChargeCardRequestMode.Basic)
    {
Run Code Online (Sandbox Code Playgroud)

我还使用 Swashbuckle / Swagger 来生成文档。问题是 Swagger 总是将我的可选参数标记为必需的。

将可选参数符号更改为:

    [Route("api/ChargeCard/{cif}/{feeScheme?}")]
Run Code Online (Sandbox Code Playgroud)

使两个参数都像必需的一样,也不会使 Swagger 将其显示为可选。

有没有办法用 Swagger 为可选参数生成正确的文档?

c# routes asp.net-web-api swagger

3
推荐指数
1
解决办法
4840
查看次数

Epplus - LoadFromCollection 和列顺序

我正在使用方法 LoadFromCollection 用列表填充 excel。但是,excel 列需要有一定的顺序才能为用户提供更好的上下文,所以我试图找出如何实现这一点。

我的一种选择是在类中设置参数的顺序,但我避免这样做,因为其他人可以更改他们的顺序,这会影响我的代码。

我的第二个选择是使用 Linq:

var orderedColumns = (from p in myList 
                     select new { p.Name, p.Age, ...}).ToList();
Run Code Online (Sandbox Code Playgroud)

这样我也可以定义列顺序,但我不喜欢在我已经准备好使用列表时必须创建匿名的想法(我也丢失了我为类定义的 DisplayNameAttribute)。

你们有什么想法吗?也许我可以使用 MemberInfo[]?

c# epplus epplus-4

3
推荐指数
1
解决办法
2494
查看次数

根据官方文档,Asp.net Core 3.0 CORS 无法工作

我想通过 Asp.Net Core 3.0 API 项目启用 CORS。这是生成的基本 Asp.Net Core Api 模板。一切都是模板中的默认设置,除了我从文档中添加了 CORS 设置:在 ASP.NET Core 中启用跨源请求 (CORS)

这是我的 Startup.cs

public class Startup
{
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",
                    builder => builder.WithOrigins("localhost", "www.google.com")
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials());
            });
        }

        // This method gets called by …
Run Code Online (Sandbox Code Playgroud)

c# cors asp.net-core

3
推荐指数
1
解决办法
6505
查看次数

示例请求正文中 JsonPatchDocument 的 Swagger 意外 API PATCH 操作文档

我正在制作 Core 3.1 Web API 并使用JsonPatch创建 PATCH 操作。我有一个名为的动作Patch,它有一个JsonPatchDocument参数。这是动作的签名:

[HttpPatch("{id}")]
public ActionResult<FileRecordDto> Patch(int id, [FromBody] JsonPatchDocument<FileRecordQueryParams> patchDoc)
Run Code Online (Sandbox Code Playgroud)

据我了解,该参数需要以以下结构接收 JSON 数据,我已成功使用该操作对其进行了测试:

[
  {
    "op": "operationName",
    "path": "/propertyName",
    "value": "newPropertyValue"
  }
]
Run Code Online (Sandbox Code Playgroud)

但是,由Swagger生成的操作文档具有不同的结构: 在此处输入图片说明

我不熟悉这种结构,甚至"value"它也缺少JsonPatchDocument对象所具有的属性。replace我见过的每个修补操作的例子都有第一个结构。

为什么 Swagger 会JsonPatchDocument为 PATCH 端点的请求正文中的对象生成替代结构?我该如何解决?

为 Swagger 安装的 NuGet 包: Swashbuckle.AspNetCore v5.6.3

c# asp.net-web-api swagger swashbuckle asp.net-core

3
推荐指数
1
解决办法
905
查看次数

具有多个可选参数的 Asp.net 核心路由调用不同的操作

在 Asp.net WebApi2 中

当调用 api/values/9b858599-7639-45da-acd6-a1323fb019b5 时,调用 get Action。

带有可选参数的操作。

当调用 api/values/9b858599-7639-45da-acd6-a1323fb019b5?maxRecords=100 或 api/values/?maxRecords=100 GetProducts Action 时。

在 Asp.net Core 中

但是在 asp.net 核心中,当 api/values/9b858599-7639-45da-acd6-a1323fb019b5 被调用时 GetProducts 动作被调用。我想在不更改现有 url 的情况下调用 Get 操作。

如何在 Asp.net core 2.0 中解决此问题

控制器

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    //https://localhost:44323/api/values/9b858599-7639-45da-acd6-a1323fb019b5
    [HttpGet("{productId:Guid}", Order = 1)]
    public ActionResult<string> Get(Guid productId)
    {
        return "value1";
    }


    //https://localhost:44323/api/values/9b858599-7639-45da-acd6-a1323fb019b5?maxRecords=100
    //https://localhost:44323/api/values/?maxRecords=100
    [HttpGet("{startRecordId:Guid?}")]
    public ActionResult<IEnumerable<string>> GetProducts(Guid? startRecordId, int maxRecords, DateTimeOffset? minimumChangeDate = null)
    {
        return new string[] { "value1", "value2" }; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core asp.net-core-routing asp.net-core-2.2

2
推荐指数
1
解决办法
7800
查看次数

注销后重定向在 Asp.net Core 2 中不起作用

我将 Asp.net Core 2.2 与 AzureAD 身份验证一起使用。它工作正常,但现在我在尝试实现注销 url 时遇到问题。

我在控制器中尝试了以下操作:

[HttpGet("[action]")]
public IActionResult SignOut()
{
    return SignOut(new AuthenticationProperties { RedirectUri = Url.Action(nameof(AfterSignOut)) }, AzureADDefaults.AuthenticationScheme);
}

[HttpGet("[action]")]
[AllowAnonymous]
public IActionResult AfterSignOut()
{
    return Ok("It's working!");
}
Run Code Online (Sandbox Code Playgroud)

当我使用浏览器https://mySite/myController/SignOut登录时,注销操作正常工作(我的用户已注销,下次我转到某个页面时,我必须再次登录)

但是,问题是我没有重定向到.urlhttps://mySite/myController/AfterSignOut中指定的url AuthenticationProperties。相反/SignOut,它只返回 HTTP 代码 200,仅此而已,它不会将我重定向到任何地方。

我在这里做错了什么?

c# azure-active-directory asp.net-core-mvc asp.net-core asp.net-core-2.2

1
推荐指数
1
解决办法
3016
查看次数

在 VS19 中发布错误“无法找到路径的一部分”的原因(错误:MSB3027、MSB3021)?

有几个与此相关的问题,但我尝试了许多解决方案,但它没有解决我的问题。

问题是当我发布 ASP.NET Core 2.2 项目时,出现此错误(为了便于阅读而进行了格式化):

Unable to copy file "C:\Users\lfirstname\TFS\dotnet\Project Name\Project Name\Dev\LFirstname\BranchName\Project Name\Website\wwwroot\lib\jquery-validation-unobtrusive\jquery.validate.unobtrusive.min.js"  
 
to  
 
"C:\Users\lfirstname\TFS\dotnet\Project Name\Project Name\Dev\LFirstname\BranchName\Project Name\Website\obj\Release\netcoreapp2.2\win-x64\PubTmp\Out\wwwroot\lib\jquery-validation-unobtrusive\jquery.validate.unobtrusive.min.js".  
 
Could not find a part of the path  
 
'C:\Users\lfirstname\TFS\dotnet\Project Name\Project Name\Dev\LFirstname\BranchName\Project Name\Website\obj\Release\netcoreapp2.2\win-x64\PubTmp\Out\wwwroot\lib\jquery-validation-unobtrusive\jquery.validate.unobtrusive.min.js'.
Run Code Online (Sandbox Code Playgroud)

在发布输出中,我收到警告 MSB3026、错误 MSB3027 和 MSB3021。

我设法解决这个问题的唯一方法是从我试图发布的分支中分支出来。然后,在新的分支中,发布成功了。然而,这是一个不一致的修复,因为在某一时刻我不得不再次从原始分支中分支出来,并且在发布新分支时我遇到了类似的错误(这次除了 jquery 之外还选择了一些其他文件)。

我想知道为什么会发生这种情况以及为什么分支(有时)可以解决它?

我尝试过的其他一些方法不起作用:

  • 清洁重建项目及解决方案
  • 重启VS和PC
  • 删除解决方案中的obj和文件夹bin
  • 删除项目的本地副本(及其父文件夹)并获取最新的 TFS
  • 创建新的发布配置文件

编辑:当我创建一个新分支时,它发布成功并且输出如下

Website -> C:\Users\lfirstname\TFS\dotnet\Project Name\Project Name\Dev\LFirstname\BranchName\Project Name\Website\bin\Release\netcoreapp2.2\win-x64\Website.dll
Website -> C:\Users\lfirstname\TFS\dotnet\Project Name\Project Name\Dev\LFirstname\BranchName\Project Name\Website\bin\Release\netcoreapp2.2\win-x64\Website.Views.dll
Website -> C:\Users\lfirstname\TFS\dotnet\Project Name\Project Name\Dev\LFirstname\BranchName\Project Name\Website\obj\Release\netcoreapp2.2\win-x64\PubTmp\Out\
Web App was published successfully file:///C:/Users/lfirstname/TFS/dotnet/Project%20Name/Project%20Name/Dev/LFirstname/BranchName/Project%20Name/Website/bin/Release/netcoreapp2.2/publish/
Run Code Online (Sandbox Code Playgroud)

只是想说,我注意到第三行开始失败,并给我关于无法复制 jquery js 文件的错误。

编辑2:我再次遇到这个问题。这次我注意到只有发布配置文件的配置设置之一遇到此错误。但在我同事的机器上,相同的代码可以很好地配置配置。

visual-studio asp.net-core

1
推荐指数
1
解决办法
2543
查看次数