一部のデータをポストするためだけにコントローラーにリクエストをポストしようとしていますが、機能しません。コントローラーの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();
});
}
}
さらに、ILogger
をILogger<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()
{
}
//..
}
アクションのルートから先頭のスラッシュ/
を削除します。これにより、コントローラーのルートが上書きされます。
//POST api/FullPillarIdentifier/getIdentifierPutFileHandlingResponse
[HttpPost]
[Route("getIdentifierPutFileHandlingResponse")]
public IActionResult CreateMessageOnQueue([FromBody] string xml)
/
または~/
で始まるアクションに適用されたルートテンプレートは、コントローラーに適用されたルートテンプレートと組み合わせられません。