永发信息网

如何改写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);
全部回答
  • 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
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯