我在执行我的角应用程序时出现了交叉原点错误
错误是
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")
);
}
}
}
如何解决这个错误?
答案 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)
此外,在防火墙配置中,启用您正在使用的端口。