访问控制允许来源'标头出现在请求的资源

时间:2016-07-18 05:31:08

标签: angularjs asp.net-web-api

我在执行我的角应用程序时出现了交叉原点错误

错误是

  

XMLHttpRequest无法加载http://localhost:52130/api/saveCandidate。对预检请求的响应没有通过访问控制检查:否'访问控制 - 允许 - 来源'标头出现在请求的资源上。起源' http://localhost:52299'因此不允许访问。响应的HTTP状态代码为500。

我试图用邮递员测试我的网络API我遇到了错误。它在下面给出

  

{     "消息":"请求实体的媒体类型' multipart / form-data'此资源不支持。",     " ExceptionMessage":"没有MediaTypeFormatter可用于读取类型' Candidate'来自媒体类型的内容' multipart / form-data'。",     " ExceptionType":" System.Net.Http.UnsupportedMediaTypeException",     " StackTrace":"在System.Net.Http.HttpContentExtensions.ReadAsAsync [T](HttpContent内容,类型类型,IEnumerable 1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n at System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable 1格式化程序,IFormatterLogger formatterLogger,CancellationToken cancellationToken)\ r \ n在System.Web.Http.ModelBinding.FormatterParameterBinding。 ReadContentAsync(HttpRequestMessage请求,Type类型,IEnumerable`1格式化程序,IFormatterLogger formatterLogger,CancellationToken cancellationToken)"   }

我的网络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")
  );
    }
   }
}

如何解决这个错误?

2 个答案:

答案 0 :(得分:0)

在startup.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”)] 属性

答案 1 :(得分:0)

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