PlatformNotSupportedException:此平台不支持安全二进制序列化

Posted

技术标签:

【中文标题】PlatformNotSupportedException:此平台不支持安全二进制序列化【英文标题】:PlatformNotSupportedException: Secure binary serialization is not supported on this platform 【发布时间】: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 并得到相同的错误。

错误: 处理请求时发生未处理的异常。 。 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 以解决此问题,但尚未发布答案,因为我尚未研究原因,我只需要我的生产环境即可工作。 【参考方案1】:

看起来最近在 OData Client for v7.7.0 中的工作已经改变了错误响应的处理方式以及异常的反序列化方式,我什至建议这是一个错误。除了this issue with deserializing exceptions

,我在发行说明中找不到任何直接证据表明此更改

将 OData 客户端降级到 v7.6.4 通常可以解决此问题。

请为这个Git Hub issue #1833 提供意见,这是相同的根本问题。

【讨论】:

以上是关于PlatformNotSupportedException:此平台不支持安全二进制序列化的主要内容,如果未能解决你的问题,请参考以下文章