访问控制允许源"标头存在于请求的资源上



我在执行我的角度应用程序时遇到跨源错误

错误是

XMLHttpRequest 无法加载 http://localhost:52130/api/saveCandidate。对预检请求的响应未通过访问控制检查:请求的资源上不存在"访问控制允许源"标头。因此,不允许访问源"http://localhost:52299"。响应具有 HTTP 状态代码 500。

我尝试使用邮递员测试我的 Web API,我遇到了错误。 下面给出

{ "消息": "此资源不支持请求实体的媒体类型'多部分/表单数据'。 "ExceptionMessage": "没有 MediaTypeFormatter 可用于从媒体类型为'multipart/form-data'的内容中读取类型为'候选人'的对象。 "ExceptionType": "System.Net.Http.UnsupportedMediaTypeException", "StackTrace": " at System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable 1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)rn at System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable 1 formatters, IFormatterLogger formatterLogger, CancelToken cancelToken)\r at System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable'1 formatters, IFormatterLogger formatterLogger, CancelToken cancelToken)" }

我的网络 API 是

using System;
using System.Data.SqlClient;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using TrackBoxAPI.Data.Model;
using System.Web.Http.Cors;
using System.Data;
using System.Collections.Generic;
using Dapper;
using System.Linq;
namespace TrackBoxAPI.Controllers
{
    [EnableCors(origins: "*", headers: "*", methods: "*")]
    [RoutePrefix("")]
    public class CandidateController :ApiController
    {
    [HttpPost]
    [Route("api/saveCandidate")]
    public string AddDetail(Candidate ct)
    {
        SqlConnection con = new SqlConnection(Constant.ConnectionString);
        SqlCommand cmd = new SqlCommand();
        cmd = new SqlCommand("sp_Insert_tblCandidate", con);
        con.Open();
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@CandidateId", ct.CandidateId);
        cmd.Parameters.AddWithValue("@Name", ct.Name);
        cmd.Parameters.AddWithValue("@Gender", ct.Gender);
        cmd.Parameters.AddWithValue("@Dob", ct.Dob);
        cmd.Parameters.AddWithValue("@Mob", ct.Mob);
        cmd.Parameters.AddWithValue("@EntryDate", ct.EntryDate);
        cmd.Parameters.AddWithValue("@Note", ct.Note);
        cmd.Parameters.AddWithValue("@Emial", ct.Emial);
        cmd.Parameters.AddWithValue("@Address", ct.Address);
        string CandidateId = cmd.ExecuteScalar().ToString();
        // var 
        return CandidateId;
        //  return Request.CreateResponse(HttpStatusCode.OK, CandidateId);
    }
}
}

webApiConfig.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web.Http;
using Microsoft.Owin.Security.OAuth;
using Newtonsoft.Json.Serialization;
using System.Web.Http.Cors;
namespace TrackBoxAPI
{
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var cors = new EnableCorsAttribute("* ", "* ", "* ");
        config.EnableCors(cors);

        // Web API routes
        config.MapHttpAttributeRoutes();
        //config.Routes.MapODataRoute("UltimaData", "OData", GenerateEDMModel());
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        config.Formatters.JsonFormatter.SupportedMediaTypes.Add(
            new      System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("text/html")
  );
    }
   }
}

如何解决此错误?

在启动中添加以下部分.cs

services.AddCors(options => options.AddPolicy("YourPolicyName", p => p.AllowAnyOrigin()
                                                                            .AllowAnyMethod()
                                                                             .AllowAnyHeader()
                                                                             // Expose headers for new token in response.
                                                                             .WithExposedHeaders(" your customized header")
                                                                             ));

并在控制器上使用 [EnableCors("YourPolicyName")] 属性

另外,在防火墙配置中,启用您正在使用的端口

最新更新