Asp.net Web API未找到与名为的控制器匹配的类型

Asp.net Web API未找到与名为的控制器匹配的类型,asp.net,asp.net-web-api,webforms,routing,Asp.net,Asp.net Web Api,Webforms,Routing,我看到这个错误被问了很多次,但到目前为止没有运气。我有一个.NET4(VS2010)网站项目。我有一个Web API项目作为一个单独的项目,在同一个解决方案中。我可以从本地机器上的网页调用WebAPI,没问题。我将整个过程推向生产,web api调用失败: {"$id":"1","Message":"No HTTP resource was found that matches the request URI 'http://khdecisiontool.ecitystage.net/api/s

我看到这个错误被问了很多次,但到目前为止没有运气。我有一个.NET4(VS2010)网站项目。我有一个Web API项目作为一个单独的项目,在同一个解决方案中。我可以从本地机器上的网页调用WebAPI,没问题。我将整个过程推向生产,web api调用失败:

{"$id":"1","Message":"No HTTP resource was found that matches the request URI 'http://khdecisiontool.ecitystage.net/api/slider/69'.","MessageDetail":"No type was found that matches the controller named 'slider'."}
要在Global.asax中注册我所做的一切:

void Application_Start(object sender, EventArgs e)
{
    //This enables api controllers in a separate class library
    GlobalConfiguration.Configuration.Services.Replace(typeof(IAssembliesResolver), new AssembliesResolver());
    GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

    var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
    json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
    GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter); 

    // Code that runs on application startup
    RegisterRoutes(RouteTable.Routes);

}
我的API路线如下所示:

routes.MapHttpRoute(
            name: "API Default",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = System.Web.Http.RouteParameter.Optional }
        ).RouteHandler = new ECityHttpControllerRouteHandler();
这是放置在我的web表单路由之后的

编辑

这是控制器:

/// <summary>
/// Api controller for sliders
/// </summary>
[Authorize]
public class SliderController : ApiController
{
    SliderService context = new SliderService();

    // GET api/slider
    /// <summary>
    /// Get a list of all sliders as slider dtos
    /// </summary>
    /// <returns></returns>
    public IEnumerable<SliderDto> Get()
    {
        var sliderList = new List<SliderDto>();
        var sliders = context.GetSliders();
        foreach (var slider in sliders)
        {
            var sliderDto = new SliderDto
            {
                ID = slider.ID,
                PersonID = slider.PersonID,
                ContentPageID = slider.ContentPageID,
                StartValue = slider.StartValue,
                EndValue = slider.EndValue,
                Date = slider.Date.ToLongDateString() + slider.Date.ToLongTimeString()
            };
            sliderList.Add(sliderDto);
        }
        return sliderList.ToList();
    }

    // GET api/slider/5
    /// <summary>
    /// Get a single slider as sliderDto
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public SliderDto Get(int id)
    {
        var slider = context.GetSlider(id);
        if (slider != null)
        {
            var sliderDto = new SliderDto
            {
                ID = slider.ID,
                PersonID = slider.PersonID,
                ContentPageID = slider.ContentPageID,
                StartValue = slider.StartValue,
                EndValue = slider.EndValue,
                Date = slider.Date.ToLongDateString() + slider.Date.ToLongTimeString()
            };
            return sliderDto;
        }
        return new SliderDto { StartValue = 0, EndValue = 0 };            
    }

    // POST api/slider
    /// <summary>
    /// Insert a slider
    /// </summary>
    /// <param name="sliderDto">The slider Dto</param>
    /// <returns></returns>
    public HttpResponseMessage Post(SliderDto sliderDto)
    {
        var slider = new Slider
        {
            ID = sliderDto.ID,
            PersonID = sliderDto.PersonID,
            ContentPageID = sliderDto.ContentPageID,
            StartValue = sliderDto.StartValue,
            EndValue = sliderDto.EndValue,
            Date = DateTime.Now
        };
        var id = context.AddSlider(slider);
        var item = context.GetSlider(id);

        var response = Request.CreateResponse<Slider>(HttpStatusCode.Created, item);

        string uri = Url.Link("Default", new { id = id });
        response.Headers.Location = new Uri(uri);
        return response;
    }

    // PUT api/slider/5
    /// <summary>
    /// Update a slider using the SliderDto
    /// </summary>
    /// <param name="id"></param>
    /// <param name="sliderDto"></param>
    public void Put(int id, SliderDto sliderDto)
    {
        try
        {
            var data = context.GetSlider(id);
            data.ID = sliderDto.ID;
            data.PersonID = sliderDto.PersonID;
            Nullable<int> contentId = null;
            if (sliderDto.ContentPageID.HasValue && sliderDto.ContentPageID.Value != 0)
                contentId = sliderDto.ContentPageID.Value;
            data.ContentPageID = contentId;
            data.StartValue = sliderDto.StartValue;
            data.EndValue = sliderDto.EndValue;
            data.Date = DateTime.Now;                
            context.UpdateSlider(data);
        }
        catch (Exception ex)
        {
            throw new HttpResponseException(HttpStatusCode.NotFound);
        }
    }

    // DELETE api/slider/5
    /// <summary>
    /// Delete a slider
    /// </summary>
    /// <param name="id"></param>
    public void Delete(int id)
    {
        var item = context.GetSlider(id);
        if (item == null)
            throw new HttpResponseException(HttpStatusCode.NotFound);
        context.DeleteSlider(item);
    }
}
//
///滑块的Api控制器
/// 
[授权]
公共类滑块控制器:ApiController
{
SliderService上下文=新建SliderService();
//获取api/滑块
/// 
///获取所有滑块作为滑块DTO的列表
/// 
/// 
公共IEnumerable Get()
{
var sliderList=新列表();
var sliders=context.GetSliders();
foreach(滑块中的变量滑块)
{
var sliderDto=新sliderDto
{
ID=slider.ID,
PersonID=slider.PersonID,
ContentPageID=slider.ContentPageID,
StartValue=滑块。StartValue,
EndValue=滑块。EndValue,
日期=slider.Date.ToLongDateString()+slider.Date.ToLongTimeString()
};
sliderList.Add(SliderTo);
}
返回sliderList.ToList();
}
//获取api/slider/5
/// 
///获取单个滑块作为SliderTo
/// 
/// 
/// 
要获取的公共滑块(int-id)
{
var slider=context.GetSlider(id);
如果(滑块!=null)
{
var sliderDto=新sliderDto
{
ID=slider.ID,
PersonID=slider.PersonID,
ContentPageID=slider.ContentPageID,
StartValue=滑块。StartValue,
EndValue=滑块。EndValue,
日期=slider.Date.ToLongDateString()+slider.Date.ToLongTimeString()
};
返回滑块到;
}
将新的SliderDto返回到{StartValue=0,EndValue=0};
}
//POST api/滑块
/// 
///插入滑块
/// 
///滑块Dto
/// 
公共httpresponsemessagepost(SliderDto SliderDto)
{
变量滑块=新滑块
{
ID=sliderDto.ID,
PersonID=sliderDto.PersonID,
ContentPageID=sliderDto.ContentPageID,
StartValue=sliderDto.StartValue,
EndValue=sliderDto.EndValue,
日期=日期时间。现在
};
var id=context.AddSlider(slider);
var item=context.GetSlider(id);
var response=Request.CreateResponse(HttpStatusCode.Created,item);
字符串uri=Url.Link(“默认值”,新的{id=id});
response.Headers.Location=新Uri(Uri);
返回响应;
}
//放置api/滑块/5
/// 
///使用SliderTo更新滑块
/// 
/// 
/// 
公共作废放置(int-id,SliderDto-SliderDto)
{
尝试
{
var data=context.GetSlider(id);
data.ID=sliderDto.ID;
data.PersonID=sliderDto.PersonID;
可为null的contentId=null;
if(sliderDto.ContentPageID.HasValue&&sliderDto.ContentPageID.Value!=0)
contentId=sliderDto.ContentPageID.Value;
data.ContentPageID=contentId;
data.StartValue=sliderDto.StartValue;
data.EndValue=sliderDto.EndValue;
data.Date=DateTime.Now;
context.UpdateSlider(数据);
}
捕获(例外情况除外)
{
抛出新的HttpResponseException(HttpStatusCode.NotFound);
}
}
//删除api/slider/5
/// 
///删除滑块
/// 
/// 
公共无效删除(int-id)
{
var item=context.GetSlider(id);
如果(项==null)
抛出新的HttpResponseException(HttpStatusCode.NotFound);
删除滑块(项目);
}
}
编辑2

以下是程序集解析程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Reflection;

/// <summary>
/// Summary description for AssembliesResolver
/// </summary>
public class AssembliesResolver : System.Web.Http.Dispatcher.DefaultAssembliesResolver
{
    public override ICollection<Assembly> GetAssemblies()
    {
        ICollection<Assembly> baseAssemblies = base.GetAssemblies();
        List<Assembly> assemblies = new List<Assembly>(baseAssemblies);        

        var controllersAssembly = Assembly.Load("MyAssemblyName");
        baseAssemblies.Add(controllersAssembly);
        return assemblies;
    }

}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.Http;
运用系统反思;
/// 
///AssembliesResolver的摘要说明
/// 
公共类AssembliesResolver:System.Web.Http.Dispatcher.DefaultAssembliesResolver
{
公共重写ICollection getAssemblys()
{
ICollection baseAssemblys=base.getAssemblys();
列表程序集=新列表(基本程序集);
var controllerassembly=Assembly.Load(“MyAssemblyName”);
BaseSassemblies.Add(controllersAssembly);
返回组件;
}
}

您可以添加控制器定义吗?我怀疑问题出在您的自定义程序集解析器上……您能分享一下它的外观吗?