Ответ на запрос предварительной проверки не проходит, и заголовок «Access-Control-Allow-Origin» отсутствует. При использовании [HttpPost] - PullRequest
0 голосов
/ 19 апреля 2020

В моем контроллере:

Когда я использую без [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} );

 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...