我的 Web api 2 控制器需要路由

2024-01-11

我有一个返回 XML 的简单 WebApi2 控制器,但我无法使用我定义的路由正确添加另一个方法:

namespace CBMI.WebAPIservice.Controllers
{
public class MarkersController : ApiController
{
    public HttpResponseMessage Get(int? id)
    {
        int i = id.HasValue ? id.Value : 0;
        XmlDocument docContent = GetXmlDataFromDB(i);
        return new HttpResponseMessage
        {
            Content = new StringContent(docContent.InnerXml.ToString(), Encoding.UTF8, "application/xml")
        };
    }
    public HttpResponseMessage GetGrantsIS()
    {
        XmlDocument docContent = GetXmlDataFromDB();
        return new HttpResponseMessage
        {
            Content = new StringContent(docContent.InnerXml.ToString(), Encoding.UTF8, "application/xml")
        };

    }
    public XmlDocument GetXmlDataFromDB()
    {
        string connStr = System.Convert.ToString(
                System.Web.Compilation.ConnectionStringsExpressionBuilder.GetConnectionString("MDWConnectionString"),
                System.Globalization.CultureInfo.CurrentCulture);
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand sqlCmd = new SqlCommand("dbo.FLAS_List_GrantLocationsByAmount_V1", conn);
        sqlCmd.CommandType = System.Data.CommandType.StoredProcedure;
        conn.Open();
        XmlDocument xmlDoc = new XmlDocument();
        XmlReader xmlReader = sqlCmd.ExecuteXmlReader();
        if (xmlReader.Read())
            xmlDoc.Load(xmlReader);
        conn.Close();
        return xmlDoc;
    }
    public XmlDocument GetXmlDataFromDB(int worldAreaID )
    {
        string scrambleAward = ""; 
        string connStr = System.Convert.ToString(
                System.Web.Compilation.ConnectionStringsExpressionBuilder.GetConnectionString("MDWConnectionString"),
                System.Globalization.CultureInfo.CurrentCulture);
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand sqlCmd = new SqlCommand("dbo.FLAS_List_Awards_V1", conn);
        sqlCmd.CommandType = System.Data.CommandType.StoredProcedure;
        sqlCmd.Parameters.AddWithValue("@AreaID", worldAreaID);
        sqlCmd.Parameters.AddWithValue("@Scramble", scrambleAward);
        conn.Open();
        XmlDocument xmlDoc = new XmlDocument();
        XmlReader xmlReader = sqlCmd.ExecuteXmlReader();
        if (xmlReader.Read())
            xmlDoc.Load(xmlReader);
        conn.Close();
        return xmlDoc;
    }

}

}

WebApiConfig.cs

namespace CBMI.WebAPIservice.App_Start
{
//  This code file defines the delegate where you should put your Web API configuration code.

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute
            (
                name: "WebApi2",
                routeTemplate: "api/{controller}/{id}"
            );
        config.Routes.MapHttpRoute
            (
                name: "ApiGrantsIS",
                routeTemplate: "api/{controller}/{action}"
            );
    } 
}

}

我不明白如何更改路由以识别action使得获得赠款IS方法被调用。相反,使用以下 URL 进行浏览

CBMI.WebAPIservice/api/markers/GetGrantsIS

路由到 Get 方法,该方法识别 id 没有值。然后它的默认值为 0 并且可以工作,但我需要让此 URL 调用 GetGrantsIS 方法。

编辑:尝试添加属性路由会出现新错误

我装饰如下:

    [Route("api/{controller}/GetGrantsIS")]
    public HttpResponseMessage GetGrantsIS()

现在我明白了:

Server Error in '/CBMI.WebAPIservice' Application.

A direct route cannot use the parameter 'controller'. Specify a literal path in place of this parameter to create a route to a controller.

Web Api 2 支持 REST 架构,这意味着它期望您的操作为 GET、POST、PUT、DELETE。

但是您可以使用以下方法获得您想要的结果属性路由 https://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2.

如果您想使用属性路由,您已经在 WebApiConfig 文件中进行了该设置。因此,您只需修改代码即可使用 Route 属性,如下所示:

[Route("api/markers/getgrantsis")]
public HttpResponseMessage GetGrantsIS()
{
  XmlDocument docContent = GetXmlDataFromDB();
  return new HttpResponseMessage
  {
    Content = new StringContent(docContent.InnerXml.ToString(), Encoding.UTF8, "application/xml")
   };

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

我的 Web api 2 控制器需要路由 的相关文章

随机推荐

  • 在 Asp.Net Identity 2 中构建自定义用户检查密码

    我需要在 asp net MVC 5 中实现并使用 Asp Net Identity 2 的应用程序中构建自定义用户密码检查 我在 stackoverflow 上读到一篇文章 在 Identity 2 1 中编写自定义 IUserPassw
  • 如何在 PowerBi 中将切片器中的选定值设置为 API

    我想从切片器中选择时间并将用户选择的值放入 API 中 当我从 API 获取值后 分析将在我的本地计算机上进行 并将分析后的数据设置到 PowerBi 中 用于用户选择的数据 我使用以下 API 设置上述切片器 http localhost
  • DB2 VARCHAR unicode 数据存储

    目前 我们在 DB2 中使用 VARCHAR 来存储文本数据 但是我们遇到了这样的问题 指定的 VARCHAR 长度与文本长度不同 因为在 DB2 中 指定的 VARCHAR 长度是 UTF 8 数据长度 该长度可能会根据存储的文本数据而变
  • 如何在 ionic 4 中刷新页面

    我想在成功删除数据后刷新页面 当我删除或更新时 我必须先刷新页面 然后刷新数据 如何在 ionic 4 中使用 navController 请帮助我 图书列表 page html
  • Blazor 角色管理通过 UI 添加角色(Crud)

    我对 blazor 还很陌生 并且对向数据库添加角色感到有些疑问 我已经实施了身份角色管理并拥有一个工作系统 但现在我想通过 GUI 添加新角色 而不是编辑数据库 我有一个名为 RolesOverview razor 的 razor 页面
  • 如何避免每个 html 页面中重复页眉和页脚代码

    我有大约十个 html 页面 每个页面也有相同的页眉和页脚标记 我可以有一个包含完整页眉和页脚的页面吗 我将从其他 html 页面引用该特定页面 如果您不关心禁用了 JavaScript 的用户 或者正在使用某些移动平台 则可以使用 Jav
  • install.packages 错误:本地存储库使用故障排除

    我刚刚创建了一个包 RTIO 和一个包存储库 Q Integrated Planning R 这是公司网络驱动器 我已将我的包放入文件夹中 Q Integrated Planning R bin windows contrib 2 15 R
  • getElementsByTagName 为 null 或未定义,仅在 IE 中 - 并且仅在函数中的一个特定位置 [重复]

    这个问题在这里已经有答案了 可能的重复 IE 中的 getElementById contentDocument 错误 https stackoverflow com questions 1477547 getelementbyid con
  • 无线电上的 Chrome 断点不会触发

    I have a page where some JavaScript modifies a radio button to be not checked and another to be checked the HTML source
  • 变量的 JavaScript 属性

    我的 JavaScript 代码有问题 我现在开始处理一些更复杂的事情 似乎在网上找到了一些答案 但不幸的是我无法解决它 问题是 我想要变量sGetMobileField and ValMob获取参数 但这样它不起作用 var oField
  • PowerShell - 将对象传递给启动作业 - 反序列化

    我知道通过 start job 执行的脚本块无法看到脚本块之外的变量 要传递变量 请使用 arguments范围 从我读过的 doco 来看 作业不能在没有连载 https learn microsoft com en us powersh
  • 不带任何特殊字符的 10 位数字的正则表达式

    10 位数字的正则表达式是什么 无特殊字符且无小数 使用此正则表达式仅匹配十位数字 d 10 要查找字符串中任意位置的十个连续数字的序列 请使用 d 10 请注意 这还将查找 11 位数字的前 10 位数字 在字符串中的任意位置搜索exac
  • 当您没有对容器的引用时,是否可以让温莎城堡解决属性依赖关系?

    我们有一个包含多个项目的解决方案 代表我们应用程序的各个层 例如 Domain Data Logic WebUI 我们的温莎城堡容器是从我们的 Web 层引用的 然后我们通过我们的层将这些依赖项级联起来 例如 In Domain publi
  • jquery 插件语法包装器

    这到底是做什么的 我知道它被 jquery 插件包围 但并没有真正理解它的作用 function undefined Plugin goes here jQuery 是一种在 javascript 中运行一段代码的方法 第一对括号是代码部分
  • php 在实例中设置匿名函数

    我刚刚开始使用 PHP 我想知道是否有一种方法可以将匿名函数添加到类实例中 例如 可以说 class A public B c new A This is where I am getting a little confused The f
  • PySpark:从数据帧创建字典的字典?

    我有以下格式的数据 这些数据是从 Hive 获取到数据帧中的 date stock price 1388534400 GOOG 50 1388534400 FB 60 1388534400 MSFT 55 1388620800 GOOG 5
  • 如何在Windows中使用批处理文件删除包含特定字符串的文件?

    我的松下相机使用其愚蠢的 PHOTOfunSTUDIO 来导入照片 它按照片拍摄日期的名称创建文件夹 并将照片分别导入到这些文件夹中 到目前为止 一切都很好 但是 如果我在从相机中删除所有旧照片之前再次导入 则无论我如何更改该软件的设置 旧
  • 将 Docker 容器与 Mesos/Marathon 链接

    到目前为止 我使用 Mesos Marathon 和 Docker 来管理服务器群以及放置在服务器上的容器 取得了巨大成功 然而 我现在想更进一步 开始做一些事情 比如自动将 haproxy 容器链接到每个启动的主 docker 服务 或者
  • SQL Server 2012 CTE 查找分层数据的根或顶层父级

    我在尝试递归地遍历层次结构以查找组织结构中可能具有的所有后代节点的顶部节点时遇到问题multiple顶级节点 我正在尝试使用 SQL Server 2012 CTE 来执行此操作 但它不会递归到达每个分支的最顶层节点 我已经尝试完全按照与此
  • 我的 Web api 2 控制器需要路由

    我有一个返回 XML 的简单 WebApi2 控制器 但我无法使用我定义的路由正确添加另一个方法 namespace CBMI WebAPIservice Controllers public class MarkersController