web-dev-qa-db-ja.com

Asp.netコア3 Web APIの投稿リクエストが機能しない

一部のデータをポストするためだけにコントローラーにリクエストをポストしようとしていますが、機能しません。コントローラーのpostメソッドにヒットしていません。私はグーグルで検索した後、多くのことを試しましたが、それでも機能しません。

Belwo urlを呼び出してデータを投稿しています

POST:https:// localhost:44341/api/FullPillarIdentifier/getIdentifierPutFileHandlingResponse

フォームの本文としてデータを送信します。

どんな助けでもいただければ幸いです

以下はコントローラコードです

[Route("api/[controller]")]
[ApiController]
public class FullPillarIdentifierController : BaseController
{

    private readonly IFullPillarRepository _pillarRepository;
    private readonly IXmlParser _xmlParser;
    private ILogger _logger;

    public FullPillarIdentifierController(ILogger logger, IFullPillarRepository pillarRepository, IXmlParser xmlParser)
    {
        _logger = logger;
        _xmlParser = xmlParser;
        _pillarRepository = pillarRepository;
    }



    // GET api/values
    [HttpPost]
    [Route("/getIdentifierPutFileHandlingResponse")]
    public IActionResult CreateMessageOnQueue([FromBody] string xml)
    {
        try
        {
            IdentifierPillarForPutFileRequest identifierPillarForPutFileRequest = _xmlParser.ToObject<IdentifierPillarForPutFileRequest>(xml);
            _pillarRepository.GetFileHandlingResponsePlan(identifierPillarForPutFileRequest);

            return Ok("Successfull");
        }
        catch (Exception e)
        {
            _logger.Log(new CoreLogging.Logging.LogMessage
            {
                ActionName = MemberMetaData.MethodName(),
                LoggingResponsibleSystem = "HermesWebApi",
                Exceptionn = e.Message
            }, Level.Error);

            return Error(e.Message);
        }

    }

}

そしてこれが私の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.AddMvc(options =>
        {
            options.RespectBrowserAcceptHeader = true; // false by default

        }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
           .AddXmlSerializerFormatters()
           .AddXmlDataContractSerializerFormatters();

        services.AddCors();
    }

    public void ConfigureContainer(ContainerBuilder builder)
    {
        var module = new DependencyModule();
        module.Configuration = Configuration;
        builder.RegisterModule(module);

    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }


        app.UseHttpsRedirection();
        app.UseCors();
        app.UseRouting();           
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}
2
user3661407

さらに、ILoggerILogger<FullPillarIdentifierController>に変更する必要があります。

[Route("api/[controller]")]
[ApiController]
public class FullPillarIdentifierController : BaseController
{
    private  ILogger<FullPillarIdentifierController> _logger;
    private readonly IFullPillarRepository _pillarRepository;
    private readonly IXmlParser _xmlParser;

    public FullPillarIdentifierController(ILogger<FullPillarIdentifierController> logger, IFullPillarRepository pillarRepository, IXmlParser xmlParser)
    {
        _logger = logger;
        _xmlParser = xmlParser;
        _pillarRepository = pillarRepository;
    }

    [HttpPost]
    [Route("getIdentifierPutFileHandlingResponse")]
    public IActionResult CreateMessageOnQueue([FromBody] string xml)
    {
        //...
    }

BaseController:

[Route("api/[controller]/[action]")]
public class BaseController : Controller
{
    public BaseController()
    {
    }
    //..
}
2
Rena

アクションのルートから先頭のスラッシュ/を削除します。これにより、コントローラーのルートが上書きされます。

//POST api/FullPillarIdentifier/getIdentifierPutFileHandlingResponse
[HttpPost]
[Route("getIdentifierPutFileHandlingResponse")]
public IActionResult CreateMessageOnQueue([FromBody] string xml)

/または~/で始まるアクションに適用されたルートテンプレートは、コントローラーに適用されたルートテンプレートと組み合わせられません。

リファレンス ASP.NET Coreのコントローラーアクションへのルーティング

2
Nkosi