如何改写WebApi部分默认规则
答案:2 悬赏:10 手机版
解决时间 2021-02-08 05:15
- 提问者网友:战魂
- 2021-02-07 06:42
如何改写WebApi部分默认规则
最佳答案
- 五星知识达人网友:春色三分
- 2021-02-07 07:01
namespace Xinchen.SOA.Server
{
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{action}"
);
config.Services.Add(typeof(ValueProviderFactory), new MyValueProviderFactory());//自定义参数查找,实现第三个目标
config.Services.Replace(typeof(IHttpControllerSelector), new ControllerSelector(config));//自定义控制器查找,实现第一个目标
config.Services.Replace(typeof(IHttpActionSelector), new HttpActionSelector());//自定义Action查找,实现第二个目标
appBuilder.UseWebApi(config);
{
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{action}"
);
config.Services.Add(typeof(ValueProviderFactory), new MyValueProviderFactory());//自定义参数查找,实现第三个目标
config.Services.Replace(typeof(IHttpControllerSelector), new ControllerSelector(config));//自定义控制器查找,实现第一个目标
config.Services.Replace(typeof(IHttpActionSelector), new HttpActionSelector());//自定义Action查找,实现第二个目标
appBuilder.UseWebApi(config);
全部回答
- 1楼网友:空山清雨
- 2021-02-07 07:59
对控制器的限制
public class controllerselector : ihttpcontrollerselector
{
httpconfiguration _config;
idictionarylt;string, httpcontrollerdescriptor; _desriptors = new dictionarylt;string, httpcontrollerdescriptor;(stringcomparer.ordinalignorecase);
public controllerselector(httpconfiguration config)
{
_config = config;
}
void initcontrollers()
{
if (_desriptors.count lt;= 0)
{
lock (_desriptors)
{
if (_desriptors.count lt;= 0)
{
var assemblies = appdomain.currentdomain.getassemblies().where(x =; !x.globalassemblycache !x.isdynamic);
var controllertypes = new listlt;type;();
foreach (var ass in assemblies)
{
controllertypes.addrange(ass.getexportedtypes().where(x =;typeof(apicontroller).isassignablefrom(x)));
}
var descriptors = new dictionarylt;string, httpcontrollerdescriptor;();
foreach (var controllertype in controllertypes)
{
var descriptor = new httpcontrollerdescriptor(_config, controllertype.name, controllertype);
_desriptors.add(descriptor.controllername, descriptor);
}
}
}
}
}
public idictionarylt;string, httpcontrollerdescriptor; getcontrollermapping()
{
initcontrollers();
return _desriptors;
}
public system.web.http.controllers.httpcontrollerdescriptor selectcontroller(system.net.http.httprequestmessage request)
{
initcontrollers();
var routedata = request.getroutedata();
var controllername = convert.tostring(routedata.values.get(;controller;));
if (string.isnullorwhitespace(controllername))
{
throw new argumentexception(string.format(;没有在路由信息中找到controller;));
}
return
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯