我有一个在属性中定义路由的 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 为可选参数生成正确的文档?
我正在使用方法 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[]?
我想通过 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) 我正在制作 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 端点的请求正文中的对象生成替代结构?我该如何解决?
在 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) 我将 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
有几个与此相关的问题,但我尝试了许多解决方案,但它没有解决我的问题。
问题是当我发布 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 之外还选择了一些其他文件)。
我想知道为什么会发生这种情况以及为什么分支(有时)可以解决它?
我尝试过的其他一些方法不起作用:
obj和文件夹bin编辑:当我创建一个新分支时,它发布成功并且输出如下
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:我再次遇到这个问题。这次我注意到只有发布配置文件的配置设置之一遇到此错误。但在我同事的机器上,相同的代码可以很好地配置配置。