C# 如何在WebApiConfig.cs中使用不同的控制器
我正在尝试对我的WebApiConfig使用一种更模块化的设计,在这里我可以设置路由并参考其他控制器。然而,我似乎找不到任何真正有效的方法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
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/”;
}
}
首先,routeDefaultApi
是常规映射,应该在映射所有特定路由后进行配置。好的,我将其向下移动,但这并不能真正解决我遇到的问题。@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/";
}
}