C# 如何在WebApiConfig.cs中使用不同的控制器

C# 如何在WebApiConfig.cs中使用不同的控制器,c#,asp.net,web,asp.net-web-api2,C#,Asp.net,Web,Asp.net Web Api2,我正在尝试对我的WebApiConfig使用一种更模块化的设计,在这里我可以设置路由并参考其他控制器。然而,我似乎找不到任何真正有效的方法 using System; using System.Net.Http.Formatting; using System.Web.Http; using ASCI.ConstantsStrorage; namespace DashBoard.API { public static class WebApiConfig { public static

我正在尝试对我的WebApiConfig使用一种更模块化的设计,在这里我可以设置路由并参考其他控制器。然而,我似乎找不到任何真正有效的方法

using System;
using System.Net.Http.Formatting;
using System.Web.Http;
using ASCI.ConstantsStrorage;

namespace DashBoard.API
{
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {

        // Web API routes
        config.MapHttpAttributeRoutes();
        // Routing for email service 
        config.Routes.MapHttpRoute(
            name: "EmailApiRoute",
            routeTemplate: Constants.BaseEndPointV1 + "{controller}",
            defaults: new { controller = "ASCIEmailController" }
        );
        //routing for accessing different fields 
        config.Routes.MapHttpRoute(
                name: "FieldsApiRoute",
                routeTemplate: Constants.BaseEndPointV1 + "{controller}/{name}/field/{fieldName}/{data}",
                defaults: new{
                        name = RouteParameter.Optional,
                        fieldName = RouteParameter.Optional,
                        data = RouteParameter.Optional
                }
        );          
        //default routing for raw dashboard objects  
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: Constants.BaseEndPointV1 + "{controller}/{name}",
            defaults: new { name = RouteParameter.Optional }
        );
        // allows for json to be the default response type, but still allows you to specify different response types (i.e XML) 
        GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings
        .Add(new RequestHeaderMapping("Accept",
                            "text/html",
                            StringComparison.InvariantCultureIgnoreCase,
                            true,
                            "application/json")
            );
    }
}
}
正如你们所看到的,我尝试将控制器设置为不同的控制器,如下所示

using System.Collections.Generic;
using System.Web.Http;
using System.Web.Http.Description;
using ASCI.ETW_Tracing;
using ASCI.ConstantsStrorage;

namespace DashBoard.API.Controllers
{
    public class ASCIEmailController : ApiController
    {
        [HttpPost]
        [Route(Constants.BaseEndPointV1 + "email")]
        [ResponseType(typeof(Models.Email))]
        public IHttpActionResult PostEmail([FromBody]Models.Email email)
        {
            // allows us to send the email
            EmailHelper emailHelper = new EmailHelper();
            Models.Email sentEmail = emailHelper.SendEmail(email);

            return CreatedAtRoute("EmailApiRoute", new { id = email.Body }, sentEmail);
        }
    }
}
我真的找不到解决这个问题的方法,任何帮助都将不胜感激


名称空间ASCI.constantstrorage
{
公共静态类常量
{
/// 
///在整个API中用于版本控制的常量。
///当前在API的1.0版上
/// 
public const string BaseEndPointV1=“api/v1/”;
}
}

首先,route
DefaultApi
是常规映射,应该在映射所有特定路由后进行配置。好的,我将其向下移动,但这并不能真正解决我遇到的问题。@ChetanRanpariya您还有其他建议吗?使用此代码调用API时会发生什么?您还可以共享Constants.BaseEndPointV1的值吗?我需要在我的机器上复制此问题,以找到适当的解决方案。给我一些时间。我在帖子的末尾添加了常量
namespace ASCI.ConstantsStrorage
{
    public static class Constants
    {
        /// <summary>
        /// Constant that is used throughout the API for version control.
        /// Currently on version 1.0 of the API
        /// </summary>
       public const string BaseEndPointV1 = "api/v1/";
    }
}