Putting web.config in angular application hosted directory stop working .NET 7 minimal API ,...

Discussão em 'Angular' iniciado por rahularyansharma, Janeiro 13, 2025.

  1. I have a .NET 7 minimal API app and its hosted in IIS and same API is called in the another angular app which is hosted in same IIS. For example https://example.com is angular app URL where https://example.com/API is the API URL .

    Angular apps works fine with the API unless I put the following web.config in the root of angular app to solve the refresh issue but once I put it there API stopped working and it started to throw 405 error message.

    Here is the config code:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <system.webServer>
    <handlers>
    <remove name="WebDAV" />
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <remove name="OPTIONSVerbHandler" />
    <remove name="TRACEVerbHandler" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <rewrite>
    <rules>
    <rule name="Angular Routes" stopProcessing="true">
    <match url=".*" />
    <conditions logicalGrouping="MatchAll">
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
    </conditions>
    <action type="Rewrite" url="/" />
    </rule>
    </rules>
    </rewrite>
    </system.webServer>
    </configuration>


    and here is code from Program.cs

    using DataAccess.DBAccess;
    using paylocityapi;
    using Microsoft.AspNetCore.Authentication.JwtBearer;
    using Microsoft.IdentityModel.Tokens;
    using System.Text;
    using Microsoft.OpenApi.Models;

    var builder = WebApplication.CreateBuilder(args);

    //swagger

    builder.Services.AddSwaggerGen(options =>
    {
    options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
    {
    Scheme = "Bearer",
    BearerFormat = "JWT",
    In = ParameterLocation.Header,
    Name = "Authorization",
    Description = "Bearer Authentication with JWT Token",
    Type = SecuritySchemeType.Http
    });
    options.AddSecurityRequirement(new OpenApiSecurityRequirement
    {
    {
    new OpenApiSecurityScheme
    {
    Reference = new OpenApiReference
    {
    Id = "Bearer",
    Type = ReferenceType.SecurityScheme
    }
    },
    new List<string>()
    }
    });
    });


    //JWT TOKEN

    builder.Services.AddAuthentication(options =>
    {
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    }).AddJwtBearer(options =>
    {
    options.TokenValidationParameters = new TokenValidationParameters
    {
    ValidateIssuer = true,
    ValidateAudience = true,
    ValidateLifetime = true,
    ValidateIssuerSigningKey = true,
    ValidIssuer = builder.Configuration["JwtSettings:Issuer"],
    ValidAudience = builder.Configuration["JwtSettings:Audience"],
    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["JwtSettings:SecretKey"]))
    };
    });


    // Add services to the container.
    // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
    builder.Services.AddEndpointsApiExplorer();
    builder.Services.AddSwaggerGen();
    builder.Services.AddSingleton<ISqlDataAccess,SqlDataAccess>();
    builder.Services.AddSingleton<IEmailService, EmailService>();
    builder.Services.AddSingleton<IUserData,UserData>();
    builder.Services.AddSingleton<IDetailData, DetailData>();
    builder.Services.AddSingleton<IDashboardData, DashboardData>();
    builder.Services.AddSingleton<IVendorData, VendorData>();

    builder.Services.AddAuthorization();

    // Enable CORS
    builder.Services.AddCors(options =>
    {
    options.AddDefaultPolicy(builder =>
    {
    builder.AllowAnyOrigin()
    .AllowAnyMethod()
    .AllowAnyHeader();
    });
    });
    var app = builder.Build();

    // Configure the HTTP request pipeline.
    if (app.Environment.IsDevelopment())
    {
    app.UseSwagger();
    app.UseSwaggerUI();

    }

    app.UseHttpsRedirection();

    app.ConfigureApi();
    app.UseCors();

    app.UseAuthentication();
    app.UseAuthorization();

    app.Run();

    Continue reading...

Compartilhe esta Página