首页 > 解决方案 > 使用 XElement 时的无参数构造函数异常

问题描述

我正在编写一个 POST API,其中代码将接收一个 XML 对象作为有效负载来检查某些数据,然后将其传递给第三方 API。

[System.Web.Mvc.HttpPost]
public string SubscriptionSettings([FromBody] XElement request)
{
  if (request != null && request.HasAttributes)
  {
   //Logic
  }
  return "some value";
}

不幸的是,我收到错误No parameterless constructor defined for this object。 我明白我应该为XElement创建一个无参数的构造函数。

但我认为在这种情况下这不是正确的方法。

示例请求有效负载:

<Envelope>
  <Body>
    <Select>
      <LIST>AAA</LIST>
            <ID>data</ID>
    </Select>
  </Body>
</Envelope>

请建议。

编辑 1:堆栈跟踪:

[MissingMethodException: No parameterless constructor defined for this object.]
   System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
   System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +142
   System.Activator.CreateInstance(Type type, Boolean nonPublic) +107
   System.Activator.CreateInstance(Type type) +13
   System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) +271

[MissingMethodException: No parameterless constructor defined for this object. Object type 'System.Xml.Linq.XElement'.]
   System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) +345
   System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +750
   System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +466
   System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +137
   System.Web.Mvc.Async.<>c__DisplayClass3_1.<BeginInvokeAction>b__0(AsyncCallback asyncCallback, Object asyncState) +679

请求中的标头:

authorization:Bearer aQwkhBb6XKEb5ZDm8-Gs7HsnvE08jgiY9rSocEm8F0S4S1
Content-Type:text/xml

我还尝试了以下标题:

authorization:Bearer aQwkhBb6XKEb5ZDm8-Gs7HsnvE08jgiY9rSocEm8F0S4S1
    Content-Type:text/json

但反应是一样的。

标签: c#constructorxelement

解决方案


推荐阅读