我在执行我的角度应用程序时遇到跨源错误
错误是
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")] 属性
另外,在防火墙配置中,启用您正在使用的端口。