有这样一个控制器:
[Area("api")]
[Route("[area]/[controller]")]
public class ProgramsController : Controller
{
[HttpGet("[action]")]
public async Task<IActionResult> Turn(int id, int state)
{
await Task.Delay(1000);
return Content("It works!");
}
}
我希望该方法Turn处理以下请求:
但是当这样的请求被执行时,参数id并state没有被设置,尽管它们包含在Request.Query值中。
问题是什么?
启动.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute( "areas", "{area:exists}/{controller}/{action}");
routes.MapRoute("default", "{controller=Programms}/{Action=Index}");
});
}
不可播放:
https://localhost:12345/api/Programs/Turn?id=1&state=2
唯一的区别(在我看来)是我的路线很久以前就按照脚手架的建议注册了:
虽然可能还有不同类型的项目:我手头的第一个项目(类型:Web Application Asp.net MVC)卡住了,但是你有纯API的项目吗?
更新。不,这不是项目的类型,也不是路线。创建了一个新应用程序并尝试了不同的路线 - 这与它们无关。某处你有一个非标准的绑定。
如果你遇到了死胡同,首先尝试创建一个新的空项目并在其中制作一个区域和这样一个简单的控制器,然后与主项目检查它们有何不同。
问题解决了。
我没有注意有一个发布配置。并且由于编译器的优化,未初始化未使用的变量。
切换到Debug就足够了,一切都变得正常了:)