Mvc Web工程中加入Web Api后,Web Api接口无法访问

2023-05-16

用vs2015 C#建立了一个web mvc工程,实现了一些简单的功能,包括对后台数据库的访问,添加、修改数据等普通功能,其中有好几个controller,比如用户管理、任务添加修改等。

现在需要允许第三方链接过来进行登录,在完成登录后,需要调用本工程中的一个web api对登录时生成的安全码进行校验,这是第三方平台为了安全控制而做的。为了添加web api,就在工程的controller上点右键,选择添加控制器,在模板中选择“Web API 2 控制器 - 空”,输入新控制器名称 CheckUser 后点确定进行创建,创建出来的类名:

public class CheckUserController : ApiController

添加一个get接口:

public string GetCheckUser(string safecode)
{
    return "ok";
}

上面点击“确定”添加文件之后,会自动打开一个临时文件readme.txt,提示需要进行一些修改,根据提示,对Globael.asax.cs进行了修改:

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);


            // 这一行就是根据提示为web api添加的
            GlobalConfiguration.Configure(WebApiConfig.Register);
        }

加了最后一行。然后运行程序,在GetCheckUser()中加上断点,在ie里打开一个新页面,地址栏中输入:

http://localhost:41123/api/CheckUser?safecode=123

结果进不到断点,页面显示401错误,这有点奇怪了,我和之前一个单纯的web api工程的配置对比了一个,也没啥不对。拷贝一个原来工程中的web api文件到本工程中,修改namespace为本工程的,然后去访问它,结果一样,也是401错误,这样断定,应该是路由的问题了。先把Application_Start()中的两行可能有关的屏蔽掉:

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            //FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            //RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);


            // 这一行就是根据提示为web api添加的
            GlobalConfiguration.Configure(WebApiConfig.Register);
        }

再调动调试,这次主页面无法显示,不用管,仍然输入拷贝过来的api,结果成功,然后把屏蔽掉的两行逐个打开,最终发现是 RouteConfig.RegisterRoutes(RouteTable.Routes); 一行导致的,这下有点麻烦了。通过跟踪发现,这一行会调用 RouteConfig.cs中的RegisterRoutes()函数,这个函数如下(默认的,没有修改过):

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }

把这里面的 routes.MapRoute() 调用屏蔽掉,再尝试访问api,也是成功的,说明就是这个路由导致的问题。但是这个屏蔽掉显然是不行的,因为屏蔽之后,页面就无法显示了,发愁。

还好我机灵,脑袋一转,有了。重新创建一个工程,这次把mvc、api都选上:

 确定后随便输入个名字就行了,创建完成后,打开Global.asax.cs文件查看,发现也差不多,但还是有点不一样,如下是新工程的Global.asax.cs的启动函数:

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }

仔细观察发现,webapi的一行调用,是在第二行,其它的没啥区别,然后我的工程也一葫芦画瓢,把这一行的调用也移到第二行,然后再运行,页面可以正常访问,api也可以正常访问了

终于成功!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mvc Web工程中加入Web Api后,Web Api接口无法访问 的相关文章

  • 2021年寒假

    2022年1月4日 周二 雨雪 主要内容 xff1a 测试学校周雄短路的板子 xff0c 焊接新板子 上午11 00开始 xff0c 首先准备好电源 xff0c 热风枪 xff0c 前一天晚上已经改完的板子 第一次上电 测得最终输出5v 1
  • JavaScript 异步编程

    异步的概念 异步 xff08 Asynchronous async xff09 是与同步 xff08 Synchronous sync xff09 相对的概念 在我们学习的传统单线程编程中 xff0c 程序的运行是同步的 xff08 同步不
  • InnoDB引擎--存储结构与文件

    数据库是数据的集合 xff0c 数据库管理系统 xff08 DBMS xff09 是操作和管理数据库的应用程序 数据库应用主要有两类 xff1a OLAP xff08 联机分析处理 xff09 和OLTP xff08 联机事务处理 xff0
  • conda安装包出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url问题

    win10本地利用conda install package时出现的问题 Fetching package metadata CondaHTTPError HTTP 000 CONNECTION FAILED for url lt http
  • NVM 切换Node版本不成功(nvm提示成功,实际Node版本未切换)

    一 背景 xff1a 因为接手了一个旧项目 xff0c node依赖版本对应不上 xff0c 于是想到用NVM切换下对应版本 xff0c 二 问题 xff1a xff08 先安装Node xff0c 后安装Nvm下 xff09 由于以前就安
  • STM32F103C8T6读取气压计MS5611,I2C读取模式

    笔者最近想用气压计模块来测一下相对高度 xff0c 使用的元器件如下图所示 所使用的最小系统板 所使用的气压计模块 其实读取还是蛮简单的 xff0c 根据核心板引脚图选择I2c接口 xff0c 然后借鉴正点原子的模拟i2c程序 xff0c
  • Linux(Ubuntu20.04)安装JDK

    简单易懂 xff0c 小学生都学会了 xff01 操作系统 xff1a Windows11 子系统 xff1a Linux xff08 Ubuntu20 04 xff09 JDK版本 xff1a openjdk8 前言 最近手痒了 xff0
  • Spring自定义AOP

    我们在学习Spring的时候 xff0c 总是会看到Spring对于AOP的支持 xff0c 这同IOC一起 xff0c 属于Spring的两大核心 既然是核心 xff0c 这AOP又有哪些应用场景呢 xff1f 相信很多小伙伴都知道 xf
  • Spring Boot全局异常处理

    前言 全局异常处理可以帮助我们拦截接口的报错 xff0c 返回调用方友好的提示 xff0c 提高了用户体验的同时 xff0c 还为我们排查异常提供了便利 那么如何定义一个全局异常处理呢 xff1f 它又是怎样帮助我们处理异常 xff0c 并
  • MySQL查询JSON字段匹配

    前言 MySQL从5 7版本开始 xff0c 引入了JSON类型字段 xff0c 这使我们可以在MySQL数据库中存储JSON格式的数据 xff0c 并保留其对象格式 xff0c 再也不用转成字符串类型保存了 xff0c 减少了许多字符串类
  • 常用的conda命令

    目录 一 conda vs pip 二 conda命令 1 conda list 2 conda install 3 conda remove 4 conda update 5 conda create 6 conda config 7 c
  • 借助ChatGPT编写html小程序

    在数值模拟过程中 xff0c 经常需要反复计算一些参数 xff0c 例如常见的无量纲参数雷诺数和瑞利数等 它们的表达式如下 xff1a R a 61 g
  • 云数据库MySQL的选择

    架构介绍 xff1a 云数据库MySQL支持四种架构 xff1a 高可用版 金融版 单节点高IO版 基础版 其中单节点高IO版的只用于只读 版本对比 xff1a 企业级别 xff0c 刚刚好公司没有自己的服务器机房的时候可以做对比选择 一般
  • 查遍全网目前最有效解决办法:Module build failed: BrowserslistError: Unknown browser query `dead`

    今天偶然间项目编译打不开了 xff0c 满篇如下错误 xff0c 网上找遍让配置一点用没得卡球一天找遍全网 xff0c 方案都无效都是配置browserslist browserslist 34 34 production 34 34 gt
  • 使用Win32 Disk Imager烧录镜像到U盘

    使用Win32 Disk Imager烧录镜像到U盘 Win32 Disk Imager是一款非常好用的Win32 磁盘映像工具 利用这款工具 xff0c 我们可以把img文件快速写入到U盘 SD卡等USB设备中 xff0c 并且它不会改变
  • js响应事件的阶段,捕获阶段,冒泡阶段

    当鼠标点击所看到的的按钮时 xff0c 其实发生了一系列的事件传递 xff0c 可以想象一下 xff0c button实际上是被body 包裹 起来的 xff0c body是被html 包裹 起来的 xff0c html是被document
  • ROS(3)订阅者subscriber编程实现

    cd testROS ws src topic publisher src 创建代码pose subscriber cpp 该例程将订阅 turtle1 pose话题 xff0c 消息类型turtlesim Pose include lt
  • C# WinForm实现多线程 小程序

    最近想用WinForm完成一个多线程的开发 xff0c 奈何以前都没有接触过多线程的东西 xff0c 让人头大 xff0c 在脚本之家看到一个很好的小程序例子 xff0c 这里自己做了小小的改动和注释 xff0c 在这里发出来大家一起学习一
  • 模拟退火算法(课程展示)

    模拟退火算法的课程展示 xff0c 放在这里与大家交流
  • Python接收串口数据 程序

    这几天在弄的项目需要使用电脑即当下位机也要当上位机 xff0c 也就是数据需要在电脑上的两个虚拟串口之间进行数据传输 xff0c 这里推荐一个创建虚拟串口的软件 xff0c VSPD xff0c 如图 xff1a 软件打开之后是这样的 xf

随机推荐