У меня очень простое приложение, в котором есть как MVC, так и контроллеры API. Оба работают локально с использованием VS 2019 и отладчика IIS. Однако, когда я развертываю этот проект на сервере Windows Server 2016 с IIS 10, контроллер API маршрутизирует все 404. Маршруты MVC работают без проблем.
Вот мой код для контроллера API
[ApiController]
public class LeadController : ControllerBase
{
[Route( "api/lead/submit" )]
[HttpPost]
public async Task<ActionResult<object>> Post( )
{
IFormCollection form = await HttpContext.Request.ReadFormAsync();
IFormFileCollection files = form?.Files;
var form_fields = form.Select( f => new KeyValuePair<String, String>( f.Key, f.Value ) );
return ( new { recieved_payload = form_fields } );
}
}
Program.cs
public class Program
{
public static void Main( string[] args )
{
CreateHostBuilder( args ).Build().Run();
}
public static IHostBuilder CreateHostBuilder( string[] args ) =>
Host.CreateDefaultBuilder( args )
.ConfigureWebHostDefaults( webBuilder =>
{
webBuilder.UseStartup<Startup>();
} );
}
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.AddControllersWithViews().AddNewtonsoftJson();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure( IApplicationBuilder app, IWebHostEnvironment env )
{
app.UseDeveloperExceptionPage();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints( endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}" );
} );
}
}
Я пробовал публикация проекта как автономного и зависимого от платформы, x86, x64 и переносимого. Ничего из этого не имеет значения.
Я также внес изменения в настройки AppPool:. Net 4.0 на «Нет управляемого кода». Это также не меняет поведения приложения.
Похоже, проблема только c для контроллеров, использующих [ApiController] - возврат json и HttpPost нормально работает MVC Контроллеры
[HttpPost]
public async Task<ActionResult<object>> Test()
{
return Json( new { worked = true } );
}
Рабочий запрос localhost:
Производственный запрос 404ing:
Изменить: добавлен web.config и конфигурация IIS
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\Etna.Api.Luxury.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>