【发布时间】:2020-07-29 15:00:29
【问题描述】:
尝试在 WebApi 和 Microsoft.Odata.Client 7.7.0 上实现从 WebApi 2.0 到 .Net Core 3.1 和 Microsoft.AspnetCore.Odata 7.4.1 的自定义授权属性转换。
我从 .NET 4.8 中的有效 OData – API 修改了这段代码,一切正常,直到我们将自定义授权属性应用于端点。
从 Odata 控制器上使用的自定义授权属性返回 UnauthorizedResult 时,客户端出现以下错误。还尝试从 AuthorizeAttribute 继承而不是 Attribute,IAuthorizationFilter 并得到相同的错误。
错误: 处理请求时发生未处理的异常。 PlatformNotSupportedException:此平台不支持安全二进制序列化。 System.Exception.add_SerializeObjectState(EventHandler 值)
[CustomAuthorization]
[ODataRoutePrefix("Data")]
public class DataController: ODataController
{
}
[AttributeUsage(AttributeTargets.Class, Inherited = true, AllowMultiple = false)]
public class CustomAuthorizationAttribute : Attribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationFilterContext filterContext)
{
if (!ValidToken(filterContext, sUserToken))
{
filterContext.HttpContext.Response.Headers.Add("AuthorizationStatus","NotAuthorized");
filterContext.Result = new UnauthorizedResult();
}
}
}
【问题讨论】:
-
我将 OData 客户端回滚到 7.6.4 以解决此问题,但尚未发布答案,因为我尚未研究原因,我只需要我的生产环境即可工作。
标签: c# asp.net-core odata webapi