由于LINQ,我在ASP.NET MVC Web API应用程序上得到CORS错误



我在WebApi.config中启用了CORS:允许任何头、方法和源

public static void Register(HttpConfiguration config)
{            
// Web API routes
config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
config.MapHttpAttributeRoutes();            
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}

请求模型

public class PagingRequest
{
public int Start { get; set; }
public int Length { get; set; }
public int Draw { get; set; }
public string Extra_search { get; set; }
public List<Order> Order { get; set; }
public List<Column> Columns { get; set; }
public Search Search { get; set; }
}

控制器方法

[HttpPost]
[Route("api/users")]
public IHttpActionResult GetUsersList(PagingRequest pagingRequest)
{
try
{
var pagedUsersList = new UserService().GetUsersPendingActivation(pagingRequest);
return Ok(pagedUsersList);
}
catch (System.Exception x)
{
Logger.Error(x);
return Ok(new Page<UserViewModel>(new List<UserViewModel>()));
}

}

服务方法

我遇到的问题是,更改m.Activetrue会产生CORS错误。我已经尝试删除LINQ中的过滤器,它运行良好,但我需要过滤掉数据。

public Page<UserViewModel> GetUsersPendingActivation(PagingRequest request){
var unorderedList = entities.User.Where(
m => (m.Active == null || m.Active == false )
&& m.AccountType != "Personal");
return PaginateData(unorderedList, request);           
}  

对我的数据进行分页的方法。调试时,我可以看到正在检索的数据,当响应到达客户端时,我看到CORS错误。

private Page<UserViewModel> PaginateData(IOrderedQueryable<User> data, PagingRequest request)
{
var filteredResults = data.Skip(request.Start).Take(request.Length)
.ToList();
var userList = filteredResults.Select(user => new UserViewModel
{
/*setting other properties*/
EncryptedId = ParameterEncryption.Encrypt(user.UserId.ToString())
})
.ToList();
return new Page<UserViewModel>(userList)
{
recordsFiltered = data.Count(),
recordsTotal = data.Count(),
draw = request.Draw
};
}

我终于解决了这个问题。事实上,它与CORS无关,尽管浏览器控制台中的错误表明了这一点。这个问题源于将具有父子关系的模型转换为JSON时的递归引用。

相关内容

最新更新