【问题标题】:ASP.NET cannot parse xml! Check file pathASP.NET 无法解析 xml!检查文件路径
【发布时间】:2016-05-23 20:02:11
【问题描述】:

我通过 ASP.NET MVC 4 创建了一个简单的 API:

public class ActionController : ApiController
{
    [WebMethod]
    public string getCommunities()
    {
        try
        {
            MethodClass method = new MethodClass();
            return method.getCommunities();
        }
        catch(Exception ex)
        {
            return ex.Message.ToString();
        }
    }
}

正在尝试在 Method 类中调用此方法:

public string getCommunities()
{
    return "bbb";
}

但无论出于何种原因,我都会收到此错误:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">cannot parse xml! Check file path</string>

我尝试用谷歌搜索该错误,但没有找到任何结果,以前有人见过这个错误吗?以及如何解决?

【问题讨论】:

  • WebMethod?为什么会在这里?
  • 因为我打算通过 ajax 使用它
  • [WebMethod] 对于 MVC 应用程序不是必需的。页面方法是在 (aspx.cs) 页面后面的代码中执行的老式方法...
  • MethodClass 构造函数中发生了什么?我怀疑这可能是Exception 被抛出的地方......
  • @user979331 我注意到您对这个问题给予了赏金,但您收到的回复不太可能比您的回复更好。编辑问题以提供 GetCommunities() 的实现,您可能会得到答案!

标签: c# asp.net asp.net-mvc api


【解决方案1】:

在 Global.asax.cs 中应该放代码如下:

GlobalConfiguration.Configuration.Formatters.Clear(); GlobalConfiguration.Configuration.Formatters.Add(new System.Net.Http.Formatting.XmlMediaTypeFormatter());

在下面的 WebApiConfig 代码中:

config.Formatters.XmlFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/xml")); var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");

【讨论】:

    【解决方案2】:

    我试图通过在 ASP.Net MVC 4 模板中创建简单的ActionController.cs 来复制您提到的案例,如下所示:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Web.Http;
    using System.Web.Services;
    
    namespace MvcApiApplicationTrial1.Controllers
    {
      public class ActionController : ApiController
      {
        [WebMethod]
        public string getCommunities() {
          try {
            MethodClass method = new MethodClass();
            return method.getCommunities();
          } catch (Exception ex) {
            return ex.Message.ToString();
          }
        }
      }
    
      public class MethodClass
      {
        public string getCommunities() {
          return "bbb";
        }
      }
    }
    

    并使用以下网址在网络浏览器(Chrome)中调用它:

    http://localhost:56491/api/Action/getCommunities
    

    并得到以下正确结果:

    如果您声明、定义和调用正确,您的代码应该完全没有问题。

    所以,我建议您重新检查您的声明、定义以及您对相关控制器/方法的调用。您的问题可能出在其他地方。

    由于错误似乎是自定义错误,从单独发布的代码来看,问题可能出在您的 getCommunities 方法的某个地方。检查方法,尝试找到“无法解析xml!”文本在那里。或者,但不太可能,错误出现在 MethodClass 构造函数中。同样的事情,检查你的MethodClass,尝试找到“无法解析xml!”文本。

    至于您在问题中发布的给定案例,我根本没有发现任何问题。

    try 和“bbb”之间的任何其他内容也可能是创建错误的根源。如果try 块中有更多内容并且我不确定实际可能在哪里生成错误,则检查错误文本将是我的第一步。

    【讨论】:

      【解决方案3】:

      正如在 cmets 中已经指出的那样,您在错误的位置寻找错误。 method.getCommunities() 抛出错误消息“无法解析 xml!检查文件路径”。

      谷歌搜索您的error,在我看来您正在抛出一个自定义异常:在您的代码中搜索该字符串可能会将您指向正确的位置。

      作为概念的快速证明,我更改了由 Visual Studio Web API 模板生成的标准 API。

      public string Get(int id)
              {
                  try
                  {
                      var t = 0;
                      var i = 1 / t;
                      return "bbb";
                  }
                  catch { return "ABBA"; }
              }
      

      将自定义错误消息完全返回为 xml 字符串

      <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">ABBA</string>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-01
        • 2021-10-06
        • 2019-01-28
        • 1970-01-01
        • 2019-01-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多