我知道这个问题有几个帖子有多个答案,但在我的情况下,我还没有找到解决方案。
- 我正在用NET 8构建Web API。*
- 我的网络API已经 Swagger *
- 我正在使用依赖注入,服务层,UnityOfWork和Repository模式。*
- 我现在不用CORS *
因此,获取数据的堆栈跟踪模式看起来像这样:
第一个月
在我的例子中,我只有3个控制器执行简单的CRUD操作
在每堂课上,我都有这样的东西:
[Produces("application/json")]
[Route("api/[controller]/[action]")]
[ApiController]
public class UsersController : ControllerBase
{
private readonly IUserService _userService;
private readonly IUserTypeService _userTypeService;
private readonly IMapper _mapper;
/*Constructor with injections*/
public UsersController(IUserService userService,
IUserTypeService userTypeService,
IMapper mapper)
{
_userService = userService;
_mapper = mapper;
_userTypeService = userTypeService;
}
[HttpPost]
public IActionResult TestAction([FromBody] UserRegisterDto registeredUserDto)
{
/*---Some code snippet here ---*/
}
}
字符串
Swagger按预期显示我的控制器和端点x1c 0d1x
但不管我执行什么操作,它都会为所有操作抛出相同的错误;其中一些是HttpGet,HttpPost,HttpPatch等。
正文请求:
- 注意:所有属性都是后端类(UserRegisterDto.cs)中的字符串类型 *
{
"username": "string",
"name": "string",
"password": "string",
"role": "string"
}
型
这是错误抛出.
这是我的Program.cs文件
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System; using System.Reflection;
using Sat.Recruitment.Infrastructure.Extensions;
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOptions(builder.Configuration);
builder.Services.AddDbContexts(builder.Configuration);
builder.Services.AddServices(builder.Configuration);
builder.Services.AddSingleton(builder.Configuration); builder.Services.AddSwagger($"
{Assembly.GetExecutingAssembly().GetName().Name}.xml");
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
builder.Services.AddControllers(options => {
options.CacheProfiles.Add("Default30seconds", new CacheProfile { Duration = 30
}); }).AddNewtonsoftJson();
var app = builder.Build(); // Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints => { _ = endpoints.MapControllers(); });
app.Run();
型
我不知道我到底需要修复什么。我已经检查了我的依赖项,似乎一切正常。我在UserController构造函数中有一个断点,但请求没有到达。
配置文件(Program.cs文件中服务的扩展方式)
x 1c 3d 1x
有人知道发生了什么吗?
谢谢你,谢谢
2条答案
按热度按时间shyt4zoc1#
在asp net中没有叫做string的约束。但是,如果你想控制id参数的外观,请考虑以下几点:
1-如果ID必须是前缀,则可以使用
{id:guid}
2-如果ID必须是整数,可以使用
{id:int}
3-如果您希望任何参数只接受字母(a到z字符),请使用
{id:alpha}
4-如果以上都不匹配,可以使用正则表达式来确保id格式的正确性,如
{regex: *your reqular expression*}
rdlzhqv92#
未能将约束引用“string”解析为类型
此错误通常是由于使用约束时引用不确定而导致的。我复制了与您相同的错误,您可以将其用作引用。当我的工艺路线模板配置了字符串类型约束时,会出现此错误:
字符串
x1c 0d1x和相同的错误将报告在我的其他方法:
型
当我删除字符串时:
型
所有方法恢复正常:
x 1c 3d 1x
在ASP.NET Core中,默认情况下路由参数的类型为string。因此,使用{parameter:string}不是有效的路由约束,因为默认类型已经是string。如果在其他控制器和方法中使用string类型约束,则可能会发生冲突。若要解决此问题,可以检查是否有其他控制器和方法配置了不正确的约束。如果存在此类约束,则可以考虑删除它们或使用alpha配置更具体的约束。有关路由约束的具体信息,请参阅以下文档:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-7.0#route-constraints