【问题标题】:Error when generating help page webapi2生成帮助页面 webapi2 时出错
【发布时间】:2017-10-04 12:45:10
【问题描述】:

我在尝试使用 MVC5 web api2 生成帮助页面时遇到错误,我知道在生成项目时它会为您生成此页面,但是我现在在尝试单击链接时遇到错误

System.StackOverflowException 未处理

错误发生在这一行formatter.WriteToStreamAsync(type, value, ms, content, null).Wait();

这就是它发生的代码。

 [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "The exception is recorded as InvalidSample.")]
    public virtual object WriteSampleObjectUsingFormatter(MediaTypeFormatter formatter, object value, Type type, MediaTypeHeaderValue mediaType)
    {
        if (formatter == null)
        {
            throw new ArgumentNullException("formatter");
        }
        if (mediaType == null)
        {
            throw new ArgumentNullException("mediaType");
        }

        object sample = String.Empty;
        MemoryStream ms = null;
        HttpContent content = null;
        try
        {
            if (formatter.CanWriteType(type))
            {
                ms = new MemoryStream();
                content = new ObjectContent(type, value, formatter, mediaType);
                formatter.WriteToStreamAsync(type, value, ms, content, null).Wait();
                ms.Position = 0;
                StreamReader reader = new StreamReader(ms);
                string serializedSampleString = reader.ReadToEnd();
                if (mediaType.MediaType.ToUpperInvariant().Contains("XML"))
                {
                    serializedSampleString = TryFormatXml(serializedSampleString);
                }
                else if (mediaType.MediaType.ToUpperInvariant().Contains("JSON"))
                {
                    serializedSampleString = TryFormatJson(serializedSampleString);
                }

                sample = new TextSample(serializedSampleString);
            }
            else
            {
                sample = new InvalidSample(String.Format(
                    CultureInfo.CurrentCulture,
                    "Failed to generate the sample for media type '{0}'. Cannot use formatter '{1}' to write type '{2}'.",
                    mediaType,
                    formatter.GetType().Name,
                    type.Name));
            }
        }
        catch (Exception e)
        {
            sample = new InvalidSample(String.Format(
                CultureInfo.CurrentCulture,
                "An exception has occurred while using the formatter '{0}' to generate sample for media type '{1}'. Exception message: {2}",
                formatter.GetType().Name,
                mediaType.MediaType,
                UnwrapException(e).Message));
        }
        finally
        {
            if (ms != null)
            {
                ms.Dispose();
            }
            if (content != null)
            {
                content.Dispose();
            }
        }

        return sample;
    }

【问题讨论】:

    标签: c# asp.net-web-api2 asp.net-web-api-helppages


    【解决方案1】:

    我在一个 web api 项目上得到了完全相同的行为,特别是在一个接收对象作为输入参数的方法上。例如:

    public IHttpActionResult Post(Person person)
    

    在我在另一个不相关的命名空间上添加了一个具有相同名称(Person)的类后,错误开始出现,因此通过使用完全限定的命名空间引用参数,错误消失了:

    public IHttpActionResult Post(MyProject.Models.Person person)
    

    希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-22
      • 2017-07-20
      • 1970-01-01
      相关资源
      最近更新 更多