Skip to content

HttpPost 405 error in some controllers #58946

Open
@whebz

Description

@whebz

Is there an existing issue for this?

  • I have searched the existing issues

Describe the bug

I am encountering a strange problem.

In our application I have a single controller where PUT, DELETE, POST getting 405 error
while the rest of controllers are working properly.

here is how my Web.Config is:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
		<handlers>
			<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
			<remove name="WebDAV"/>
		</handlers>
		<modules runAllManagedModulesForAllRequests="true">
			<remove name="WebDAVModule"/>
		</modules>
		<aspNetCore processPath="dotnet" 
					arguments=".\WebUI.dll" 
					stdoutLogEnabled="false" 
					stdoutLogFile=".\logs\stdout" 
					hostingModel="inprocess" />
		<httpProtocol>
			<customHeaders>
				<clear />
				<add name="Access-Control-Expose-Headers " value="*"/>
				<add name="Access-Control-Allow-Origin" value="*" />
				<add name="Access-Control-Allow-Methods" value="*" />
				<add name="Access-Control-Allow-Headers" value="*" />
				<remove name="X-Powered-By" />
			</customHeaders>
		</httpProtocol>
    </system.webServer>
  </location>
</configuration>
<!--ProjectGuid: B10BA5B4-B02C-4528-9272-8478A9F7B038-->

Here is my startup.cs


// configure services
        #region CORS

        services.AddCors(options =>
        {
            options.AddPolicy(
                AllowedOrigins,
                builder =>
                {
                    builder.AllowAnyOrigin()
                        .AllowAnyHeader()
                        .AllowAnyMethod();
                });
        });

        #endregion

// under configure
    app.UseCors(AllowedOrigins);

From controller I am getting this Response header:

Access-Control-Allow-Headers: *
Access-Control-Allow-Methods: *
Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: *
Allow: GET, HEAD
Cache-Control: no-cache,no-store
Date: Thu, 07 Nov 2024 09:44:21 GMT
Expires: -1
Pragma: no-cache
Server: Microsoft-IIS/8.5
Transfer-Encoding: chunked

Controller:

using Application.Common.DTO;
using Application.TableObjects;
using Application.TableObjects.Commands;
using Application.TableObjects.Queries;
using MediatR;
using Microsoft.AspNetCore.Mvc;
using RI.QueryExecutor;

namespace WebUI.Controllers;

public class ListTableController : ApiControllerBase
{
    public ListTableController(ISender sender, IHttpContextAccessor httpContextAccessor)
        : base(sender, httpContextAccessor) { }

    [HttpPost("save")]
    public async Task<IResult<TableIndexDto>> CreateAsyc([FromBody] CreateTableIndex request)
        => await Mediator.Send(request);

    [HttpDelete("save")]
    public async Task<IResult<TableIndexDto>> UpdateAsyc([FromQuery] DeleteTableIndex request)
        => await Mediator.Send(request);

    [HttpPut("save")]
    public async Task<IResult<TableIndexDto>> UpdateAsyc([FromBody] UpdateTableIndex request)
        => await Mediator.Send(request);
}

angular service:

post<TPost, TOut>(url: string, param: TPost): Observable<TOut> {
    return this
      .http
      .post<TOut>(url, param, this.buildHttpOptions())
      .pipe(catchError(_ => this.handleError(_)));
  }



  private buildHttpOptions(): { headers: HttpHeaders; } {
    return {
      headers: this.buildBaseHeaders()
    };
  }

  private buildBaseHeaders(): HttpHeaders {
    const lang: string = 'it';
    const user:string = STRING_EMPTY;
    const datow: string = STRING_EMPTY;
    return new HttpHeaders(this.GetHttpHeaderObject(user, lang, datow));
  }




  private GetHttpHeaderObject(user: string, lang: string, datow: string) : any {
    return {
      'Cache-Control': 'no-cache, no-store, must-revalidate, post-check=0, pre-check=0',
      'Pragma': 'no-cache',
      'Content-Type': 'application/json',
      'Accept-Language': `${lang}-${lang.toUpperCase()}`
    }
  }

Expected Behavior

No response

Steps To Reproduce

No response

Exceptions (if any)

No response

.NET Version

8

Anything else?

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    area-mvcIncludes: MVC, Actions and Controllers, Localization, CORS, most templates

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions