web服务 – 在Ajax请求期间获取“找不到与控制器命名的类型”错误消息

我已经看过很多关于这个问题的主题,但不幸的是我相信每个案例都是一个不同的案例(或大多数案例),我真的很想得到一些专家对我的案例的意见,因为我不能让我的代码工作甚至阅读完一些其他主题后.

情况:我在jQuery中使用Ajax Request调用我在WebApi项目中创建的WebService方法以及MVC 4应用程序.

我的WebService控制器类看起来像认值,如下所示:

public class AdditionalInfoController : ApiController
{
    //GET api/AdditionalInfo
    public IEnumerable<string> Get()
    {
        return new string[] { "value1","value2" };
    }

    //GET api/AdditionalInfo/5
    public string Get(int id)
    {
        return "value";
    }

    //PUT api/AdditionalInfo/5
    public void Put(int id)
    {
        string test = "";
    }
}

来自jQuery的我的Ajax请求如下所示:

function GetAdditionalInfo(obj)
{
    var request = jQuery.ajax({
        url: "/api/AdditionalInfo/Get",type: "GET",data: { id: obj.id },datatype: "json",async: false,beforeSend: function () {
        },complete: function () {
        }
    })
    .done(function (a,b,c) {
        alert("Additional info was retrieved successfully!");
    })
    .fail(function (a,c) {
        alert("An error happened while trying to get the additional info!");
    });
}

我的WebAPIConfig文件如下所示:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",routeTemplate: "api/{controller}/{action}/{id}",defaults: new { id = RouteParameter.Optional }
        );
    }
}

最后但并非最不重要的是,这是我的问题:当我在.fail中浏览返回的数据变量时,此错误消息一直出现,这就是所写的:

"{
    "Message":"No HTTP resource was found that matches the request URI      'http://localhost:59096/api/AdditionalInfo/Get?id=1'.","MessageDetail":"No type was found that matches the controller named    'AdditionalInfo'."
}"

如果有人能尽快帮助我,我将非常感激.提前致谢!

最好的祝福,

解决方法

查看错误看起来Web API无法找到控制器’类型’AdditionalInfo. Web API使用程序集解析程序扫描程序集并找出控制器类型.在你的情况下由于某种原因它无法找到你的’AdditionalInfo’控制器可能是因为加载具有这个控制器的组件有一些问题.

尝试以下操作,查看EventLog中是否记录了任何错误.如果您发现任何错误,那么您可能应检查这些组件中是否存在控制器.

>在Web.config中进行以下更改以查看EventLog中的错误

< System.Diagnostics程序>
< trace autoflush =“false”indentsize =“4”>
<听众>
< add name =“myListener”
类型= “System.Diagnostics.EventLogTraceListener”
initializeData =“WebApiDiagnostics”/>
< /听众>
< /跟踪>
< /system.diagnostics\u0026gt;
>在WebApiConfig.cs中,您可以执行以下操作:

IAssembliesResolver assembliesResolver = config.Services.GetAssembliesResolver();

    ICollection<Assembly> assemblies = assembliesResolver.GetAssemblies();

    StringBuilder errorsBuilder = new StringBuilder();

    foreach (Assembly assembly in assemblies)
    {
        Type[] exportedTypes = null;
        if (assembly == null || assembly.IsDynamic)
        {
            // can't call GetExportedTypes on a dynamic assembly
            continue;
        }

        try
        {
            exportedTypes = assembly.GetExportedTypes();
        }
        catch (ReflectionTypeLoadException ex)
        {
            exportedTypes = ex.Types;
        }
        catch (Exception ex)
        {
            errorsBuilder.AppendLine(ex.ToString());
        }
    }

    if (errorsBuilder.Length > 0)
    {
        //Log errors into Event Log
        Trace.TraceError(errorsBuilder.ToString());
    }

顺便说一下,上面的一些代码实际上来自DefaultHttpControllerTypesResolver,Web API使用它来解析控制器类型.
http://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Http/Dispatcher/DefaultHttpControllerTypeResolver.cs

编辑:您可以遇到此问题的另一种情况是您的控制器是否嵌套在另一个类中.这是一个后来修复的错误.

相关文章

vue阻止冒泡事件 阻止点击事件的执行 &lt;div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些