您好,我试图了解为什么我的请求未进入我的api路由。它们似乎到达了服务器,但不会在MVC
中散开。
服务器正在运行:http://localhost:9300
我要求的路线是:http://localhost:9300/api/getusers
程序
public class Program {
public static void Main(string[] args) {
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) {
var builder = new WebHostBuilder();
builder.UseStartup<Startup>();
var url = Address.Default.ToUrl();
builder.UseKestrel().UseUrls(url);
return builder;
}
}
启动
public class Startup {
public Startup(IConfiguration configuration) {
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services) {
services.AddOptions();
services.AddMvc();
}
public IConfiguration Configuration;
public void Configure(IApplicationBuilder app) {
Debug.WriteLine("Entered server"); //enters successfully here
app.UseMvc(); //does not enter the controller
}
}
控制器
这是一个带有GET
方法的简单控制器。根本没有调用构造函数。为什么会发生这种情况?我在服务器第一次运行时就知道了。它会对路由进行运行状况检查
[ApiController]
class UserController : ControllerBase {
private static List<User> users = new List<User> {
new User{Id=0,Age=0,Name="Failed"},
new User{Id=12,Age=33,Name="Daniel"},
new User{Id=13,Age=33,Name="Marian"},
};
public UserController() {
Debug.WriteLine("Controller called"); //does not get called !
}
[HttpGet]
[Route("api/getusers")]
public async Task<HttpResponseMessage> GetUsers() {
await Task.Delay(1000);
return new HttpResponseMessage {
Content = new StringContent(users.ToJson()),
StatusCode = HttpStatusCode.OK
};
}
}
PS ,我是否需要添加其他内容?我想念的是我密切关注了其他实现。
答案 0 :(得分:4)
我已经使用dotnet new webapi
创建了webapi项目。
我设法通过更改类似控制器的访问修饰符来访问具有类似配置的url。尝试将public
关键字添加到class UserController
中。所以应该是public class UserController
如果有必要并且上面的步骤无济于事,我将提供有关项目配置的更多信息。