В моем контроллере:
Когда я использую без [HttpPost], тогда он работает. Но когда я использую [HttpPost] перед методом, он показывает следующее сообщение:
Blockquote
'http://localhost: 59446 / Registration / RegistrationSave ' from origin 'http://localhost: 4200 ' заблокировано политикой CORS: Ответ на предпечатный запрос не пропускает доступ контрольная проверка: в запрашиваемом ресурсе отсутствует заголовок «Access-Control-Allow-Origin».
Как мне преодолеть эту ситуацию?
В моем контроллере:
[AllowCrossSite]
[HttpPost]
public JsonResult RegistrationSave(RegistrationInfo registration)
{
if (ModelState.IsValid)
{
db.RegistrationInfo.Add(registration);
db.SaveChanges();
}
ProfileInfo info = new ProfileInfo();
var registrationId = db.RegistrationInfo.Max(s => s.Id);
info.RegistrationId = registrationId;
info.Email = registration.Email;
info.UserName = registration.Name;
db.ProfileInfo.Add(info);
return Json(new { status = "Successfully Registered" });
}
AllowCrossSiteAttribute.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace RegistrationApp.Models
{
public class AllowCrossSiteAttribute: ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin",
"*");
// filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept");
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-
Credentials", "true");
string rqstMethod = HttpContext.Current.Request.Headers["Access-Control-Request-Method"];
if (rqstMethod == "OPTIONS" || rqstMethod == "POST")
{
filterContext.RequestContext.HttpContext.Response.AppendHeader("Access-Control-Allow-
Methods", "GET, POST, OPTIONS");
filterContext.RequestContext.HttpContext.Response.AppendHeader("Access-Control-Allow-
Headers", "X-Requested-With, Accept, Access-Control-Allow-Origin, Content-Type");
}
//if (filterContext.HttpContext.Request.HttpMethod == "OPTIONS")
//{
// //filterContext.HttpContext.Response.Flush();
// filterContext.HttpContext.Response.End();
//}
base.OnActionExecuting(filterContext);
}
}
}
Мой Angular 9 Сервис:
import { Injectable } from '@angular/core';
import {HttpClient,HttpHeaders} from '@angular/common/http';
import {Observable} from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class LoginService {
url="http://localhost:59446/Registration/RegistrationSave";
constructor(private http:HttpClient) { }
_headers: HttpHeaders = new HttpHeaders({
'Content-Type': 'application/json; charset=utf-8'
});
submitRegistrationInfo(data):Observable<any>{
console.log(data);
return this.http.post<any>(this.url,data,{headers:this._headers} );
}
}