ASP.NET Web API 2是一个用于为浏览器和移动设备等客户端构建HTTP服务的框架。它基于Microsoft .NET Framework,是构建RESTful服务的理想选择。
我在我的 WebApi 项目中使用 aspnet-api-versioning,它工作正常。版本不是硬编码的,它们是从命名空间中检索的。 现在我想检索已经实施的列表...
Web API C# 如何允许发布对象模型(如果它是可选字段)
我是 Web API 新手。我想看看我们是否可以提交没有可选字段的 POST 请求。 我的对象模型 公开课我的地址 { 公共字符串地址1 { 获取;放; } 噗...
我正在开发一个在前端使用 C# Web API 2 和 Angular 12 的大型系统。通过 Oracle 传入 C# 的日期是两个系统中的真实日期(不是字符串)。 他们遇到...
目前在 Application Insights 中,我们遇到了 2 个非常奇怪的问题。 我们的基础设施使用 API 管理,后端是带有多个虚拟应用程序的 Azure 应用服务。 我们正在使用 NE...
我应该如何处理 NotFound 404 服务而不仅仅是简单的存储库
所有关于 Web API 的示例和服务器上的返回资源状态如下所示: var resource = repository.Get(id); 如果(资源==空) { 返回未找到(); } 返回资源; 这适用于...
How to use MudDateRangePicker in blazor server using web api
我想在我的数据库中使用 MudBlazor 中的 MudDateRangePicker 过滤或搜索从这个(日期)到这个(日期)的日期。我收到一个错误的请求,而且我的代码中似乎有错误。有人可以...
HttpClient 标头与 HttpRequestMessage 标头
我们什么时候应该使用 HttpRequestMessage 对象中的标头而不是 HttpClient 中的标头? 我们需要添加授权(总是在变化)和一些自定义标头(总是在变化)。 问题 ...
在 Web API 2 中,如何确定将在 Application_PostResolveRequestCache 中调用哪个操作?
我试图弄清楚我需要向 ApiControllerActionSelector.SelectAction(controllerContext) 提供哪些数据,以便准确确定将调用的操作。 我需要做...
我正在使用 ASP.NET Web API 2,我想从我的 API 返回一个错误代码为 404 的 json 结果。 我试图模仿这个结果: 这是我试过的: [RoutePrefix("错误")] p...
WebAPI 访问令牌生成后,WebAPI 如何为下一个请求验证该令牌?我想知道我是否可以使用 [Authorize] 属性,它必须将客户端发送的令牌与 ...
Microsoft Owin Hosting 只能从本地主机访问 - 从公共 ip 无法访问
我正在使用 aws Windows Server 2022 Datacenter build 21H2。尝试使用 webapi 托管 owin。 我的电脑操作系统是Windows 10 .net 框架 4.8 webapi 只能从 localhost:port/endpoint 访问。无法...
在 ModelState.Errors 中使用 [JsonProperty("name")]
我们有几个模型通过 JsonProperty 覆盖名称,但是当我们通过 ModelState 获得验证错误时,这会导致问题。例如: 我的模型类 { [JsonProperty("id")]...
Autofac 与自托管 Owin 服务器的集成为所有具有依赖项的 WebApi 控制器返回 404
概述 我们有一个解决方案,我们正在为 DI 从 ninject 切换到 autofac。 我们有一个控制台应用程序 (.net 4.8),它启动两个单独的进程以在本地进行测试。它开始了...
`Autofac 与自托管 Owin 服务器的集成为所有具有依赖项的 WebApi 控制器返回 404
概述 我们有一个解决方案,我们正在为 DI 从 ninject 切换到 autofac。 我们有一个控制台应用程序 (.net 4.8),它启动两个单独的进程以在本地进行测试。它开始了...
我使用 Web API 2 (MVC 5) 创建了一个 API 方法,如下所示: /// /// 导入给定组织的所有工作。该方法假定组织的所有... 我已经使用 Web API 2 (MVC 5) 创建了一个 API 方法,如下所示: /// <summary> /// Import all of the jobs for the given organisation. This method assumes that all of the organisation's active jobs are present in the jobs array. /// To delete a job, simply exclude it from the jobs array. To delete all of the jobs, pass an empty array /// </summary> /// <param name="org">Organisation Id, provided by Shopless team</param> /// <param name="jobs">Full list of jobs which should be imported, json array</param> /// <response code="200">Jobs list have been queued for import (includes validation errors if any)</response> /// <response code="401">Access to this organisation was denied</response> /// <response code="404">Invalid organisation id</response> [SwaggerResponse(HttpStatusCode.BadRequest)] [SwaggerResponse(HttpStatusCode.NotFound)] [SwaggerResponse(HttpStatusCode.Unauthorized)] [HttpPost] [Route("org/{org}/jobs/full-import")] public IHttpActionResult FullImport(long org, [FromBody] List<JobApiDto> jobs) { if (!ModelState.IsValid) { return BadRequest("Jobs array is invalid"); } else if (org < 1) { return NotFound("Invalid organisation id"); } else if (!((ClaimsPrincipal)User).HasReadWriteAccessToOrganisation(org)) { return Unauthorized("Access to this organisation was denied"); } _apiProductUploader.Upload(org, jobs, out string message); return Accepted(message); } 上述方法接受JobApiDto的列表: public class JobApiDto { /// <summary> /// Job Id (unique id assigned to the job by the API consumer) /// </summary> /// <example>e5f52dae-e008-49bd-898b-47b5f1a52f40</example> public string UniqueThirdPartyId { get; set; } /// <summary> /// Short description which will be displayed in search result /// </summary> /// <example>Competitive salary, great team, cutting edge technology!</example> public string Synopsis { get; set; } // more properties 这就是 Swagger 文档的样子: 当我展开OrganisationJobs动作时: 这是模型选项卡: 如您所见,控制器的 xml 文档为 API 方法生成了正确的描述,但我无法理解为什么我为模型提供的描述(即 JobApiDto)没有显示? 此外,当我单击“示例值”时,什么也没有发生。 感谢亚历山大指出这个答案。 我安装了 Swashbuckle.Examples Nuget 包。 (文档很棒。) 我不得不用以下方式注释控制器: [SwaggerRequestExample(typeof(JobApiDto), typeof(ListJobApiDtoExample), jsonConverter: typeof(StringEnumConverter))] 这就是控制器定义的样子: /// <summary> /// Import all of the jobs for the given organisation. This method assumes that all of the organisation's active jobs are present in the jobs array. /// To delete a job, simply exclude it from the jobs array. To delete all of the jobs, pass an empty array /// </summary> /// <param name="org">Organisation Id, provided by Shopless team</param> /// <param name="jobs">Full list of jobs which should be imported, json array</param> [SwaggerRequestExample(typeof(JobApiDto), typeof(ListJobApiDtoExample), jsonConverter: typeof(StringEnumConverter))] [SwaggerResponse(HttpStatusCode.OK, Description = "Jobs array has been queued for import", Type = typeof(ImportResponse))] [SwaggerResponseExample(HttpStatusCode.OK, typeof(ImportResponseExamples))] [SwaggerResponse(HttpStatusCode.BadRequest, "Jobs array is invalid")] [SwaggerResponse(HttpStatusCode.NotFound, "Invalid organisation id")] [SwaggerResponse(HttpStatusCode.Unauthorized, "Access to this organisation was denied")] [HttpPost] [Route("org/{org}/jobs/full-import")] public IHttpActionResult FullImport(long org, [FromBody] List<JobApiDto> jobs) { if (!ModelState.IsValid) { return BadRequest("Jobs array is invalid"); } else if (org < 1) { return NotFound("Invalid organisation id"); } else if (!((ClaimsPrincipal)User).HasReadWriteAccessToOrganisation(org)) { return Unauthorized("Access to this organisation was denied"); } _apiProductUploader.Upload(org, jobs, out ImportResponse importResponse); return Accepted(importResponse); } 这里是ListJobApiDtoExample的实现: public class ListJobApiDtoExample : IExamplesProvider { public object GetExamples() { return new JobApiDto() { UniqueThirdPartyId = "e5f52dae-e008-49bd-898b-47b5f1a52f40", CategoryId = 1183, Title = "Senior Software Developer", Description = "Example company is looking for a senior software developer... more details about the job", Reference = "", Synopsis = "Competitive salary, great team, cutting edge technology!", MinSalary = 120000, MaxSalary = 140000, SalaryPer = "Per annum", DisplaySalary = true, CustomSalaryText = "plus bonus", WorkType = "Full time", Location = "Wellington CBD", ContactName = "John Smith", ContactEmail = "[email protected]", ContactPhoneNumber = "021 123 456 789", ApplicationUrl = "", LogoUrl = "https://www.example-company.com/my-company-logo", YouTubeVideo = "https://www.youtube.com/watch?v=khb7pSEUedc&t=1s", StartDate = null, PostedAt = null }; } } 请注意,我还有一个 API 返回类型的示例,ImportResponse。与之前的模型类似,我在控制器上有这个注释: [SwaggerResponseExample(HttpStatusCode.OK, typeof(ImportResponseExamples))] 这是植入: public class ImportResponseExamples : IExamplesProvider { public object GetExamples() { return new ImportResponse() { Message = "Products are queued to be imported" }; } } 现在,文档正确显示了示例:
我跟进到 xml 文档部分,以便使用 Swashbuckle 创建 Swagger 文档。它应该允许我通过(在我的例子中)查看端点: http://localhost:51854/swagger/ui/index
在将问题放在这里之前我进行了很多搜索,但是搜索得越多,我就越困惑。 所以我创建了一个处理程序,我正在尝试获取这样的路由: 公开课
我需要能够处理 REST 调用中的特殊字符。具体来说。和/字符。 例如,我有一个 GET 路由 /api/division/{someDivision}。现在,用参数调用这条路线...
我正在试验“Hosted Blazor WASM”项目。此问题不涉及 Blazor 客户端路由器(工作正常)。这与“服务器端”路由器无关
ASP.NET Web API 2 - [FromBody] 为空
我有一个非常简单的测试应用程序,可以将 json Post 发送到我的网络服务。一切正常,但由于某种原因,Post([FromBody] 字符串值)中收到的值为空。 // 发布应用...