在 asp.net MVC 控制器中调用异步外部 Web 服务

2024-05-08

在 Asp.net MVC 控制器(GET 方法)中,我调用外部 Web 服务 - 用于 IP 地理定位 - 返回 IP 位置的 json 数据。如何使调用异步,以便堆栈可以在等待服务响应时继续。当 GEO IP 请求完成后,我希望能够更新数据库。这是当前的同步代码:

public ActionResult SelectFacility(int franchiseId, Guid? coachLoggingTimeStampId)
{
    //...
    string responseFromServer = Helpers.GetLocationByIPAddress(userIpAddress);

    HomeModels.GeoLocationModel myojb = new HomeModels.GeoLocationModel();

    if (!String.IsNullOrEmpty(responseFromServer))
    {
        JavaScriptSerializer js = new JavaScriptSerializer();
        myojb = (HomeModels.GeoLocationModel)js.Deserialize(responseFromServer, typeof(HomeModels.GeoLocationModel));

    }
    //...
}
public static string GetLocationByIPAddress(string ipAddress)
{
    Stream resStream = null;
    string responseFromServer = "";
    try
    {
        string url = GeoLocationPath.FreeGeoIP + ipAddress;
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = "GET";
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        resStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(resStream);
        responseFromServer = reader.ReadToEnd();
        return responseFromServer;
    }
    catch (Exception ex)
    {
        //TODO handle this
    }
    finally
    {
        if (null != resStream)
        {
            resStream.Flush();
            resStream.Close();
        }
    }
    return responseFromServer;
}

有什么建议 - 线程、AsyncTask 吗? 谢谢


使 ASP.NET MVC 控制器异步:

http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4 http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4

然后使用HttpClient.GetStringAsync http://msdn.microsoft.com/en-us/library/hh551746%28v=vs.110%29.aspx and await其结果:

public async Task<ActionResult> SelectFacility(
    int franchiseId, Guid? coachLoggingTimeStampId)
{
    //...
    string responseFromServer = await Helpers.GetLocationByIPAddressAsync(
        userIpAddress);
    //...
}

public static async Task<string> GetLocationByIPAddress(string ipAddress)
{
    using (var httpClient = new HttpClient())
        return await httpClient.GetStringAsync(
            GeoLocationPath.FreeGeoIP + ipAddress);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 asp.net MVC 控制器中调用异步外部 Web 服务 的相关文章

  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • 如何在多线程C++ 17程序中交换两个指针?

    我有两个指针 pA 和 pB 它们指向两个大的哈希映射对象 当pB指向的哈希图完全更新后 我想交换pB和pA 在C 17中 如何快速且线程安全地交换它们 原子 我是 c 17 的新手 2个指针的原子无等待交换可以通过以下方式实现 inclu
  • 代码 GetAsyncKeyState(VK_SHIFT) & 0x8000 中的这些数字是什么?它们是必不可少的吗?

    我试图在按下按键的简单动作中找到这些数字及其含义的任何逻辑解释 GetAsyncKeyState VK SHIFT 0x8000 可以使用哪些其他值来代替0x8000它们与按键有什么关系 GetAsyncKeyState 根据文档返回 如果
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • ComboBox DataBinding 导致 ArgumentException

    我的几个类对象 class Person public string Name get set public string Sex get set public int Age get set public override string
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • JavaScript Promise 不执行 .then()

    我在 JavaScript 中的 Promise 方面遇到了一些问题 我想做的是获得一个地址列表 然后对于每个地址 我需要调用地理编码 API 来获取 lat lng 然后我将继续将标记与热图一起绘制 这是我的代码 let promiseK
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • C# 存档中的文件列表

    我正在创建一个 FileFinder 类 您可以在其中进行如下搜索 var fileFinder new FileFinder new string C MyFolder1 C MyFolder2 new string
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • IQueryable 单元或集成测试

    我有一个 Web api 并且公开了一个端点 如下所示 api 假期 name name 这是 Web api 的控制器 get 方法 public IQueryable
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 如何使用Jquery获取MS下拉列表的选定值

    我在我的 MVC 项目中使用了 MS 下拉列表 现在我想使用 Jquery 获取 MS 下拉值 如何才能做到这一点呢 Country msDropdown 我想使用 JQuery 获取 INDIA 的选定值 var countryName
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • 将数组作为参数传递

    如果我们修改作为方法内参数传递的数组的内容 则修改是在参数的副本而不是原始参数上完成的 因此结果不可见 当我们调用具有引用类型参数的方法时 会发生什么过程 这是我想问的代码示例 using System namespace Value Re
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke

随机推荐

  • Firebase Storage put() 方法上传数字数组而不是字符串

    我想将字符串上传到 Firebase 存储文件 我尝试过 let myString storage ref path child file txt putString myString raw and with let myString s
  • Pygame 文本不渲染

    好的 我正在用 python 和 pygame 制作一个多项选择测验游戏 不过 我已经完成了开始屏幕并尝试制作问题屏幕 我根本不明白为什么文本不呈现 这是我的代码 enter pressed False random question ra
  • nginx 匹配位置中的特定单词

    我在匹配 nginx request body 变量中的特定单词时遇到问题 如果正文请求中有特殊单词 我想代理传递 所以我的方法是这样的 location php if request body proxy pass http test p
  • 客户端如何获取session id? (网络套接字)

    有什么办法可以做到这一点吗 客户端 function connectWebSocket var socket new SockJS socket stompClient Stomp over socket stompClient conne
  • 有没有办法让vscode行号字段宽度变小?

    包含代码行号 VSC 的垂直列太宽 有办法缩小范围吗 您无法更改此列的大小 实际上有三列 行号左侧是名为的列glyphMargin 设置调试断点的地方 红点 编辑设置时 当您指向该线上时 该列会显示一支笔 如下面的屏幕截图所示 行号本身 在
  • 在C中更改函数内的数组

    我正在学习 C 并且很困惑为什么在 main 中创建的数组不会在函数内部更改 我假设传递的数组是一个指针 并且更改指针应该更改数组 对吧 有人可以解释这种情况下发生了什么吗 谢谢你的帮助 int main int i length 10 i
  • C# 中 WinForm TextBox 中数字的按键事件

    我想限制用户在文本框中仅输入数字 我在按键事件中添加此代码 private void txtPartID KeyPress object sender KeyPressEventArgs e if e KeyChar gt 0 e KeyC
  • gRPC + 图片上传

    我想创建一个简单的gRPC用户可以上传他 她的图片的端点 协议缓冲区声明如下 message UploadImageRequest AuthToken auth 1 An enum with either JPG or PNG FileTy
  • Hololens-无法连接到设备

    我意识到这个问题在其他地方被问过 但答案似乎直接针对 Hololens 和 PC 之间的配对过程 这是我的问题的一部分 我在 Unity 中制作了一个应用程序并导出到 Visual Studio 当我尝试在 Hololens 上运行它时 出
  • MSAL.Net 没有帐户或登录提示传递到 AcquireTokenSilent 调用

    我见过很多相同或类似的问题 并尝试了他们所有的答案 如果有的话 但这些都不适合我 我在用着这个例子 https github com Azure Samples ms identity javascript angular spa aspn
  • XHR 调用是宏任务还是微任务?

    Ajax 调用被安排为微任务还是宏任务 浏览器之间有什么区别吗 在 JavaScript Ninja 的秘密 第二版一书中 作者指出网络事件被安排为宏任务 因此 XHR 回调与宏任务一起排队
  • 生成所有可能的树

    给定以下数据类型定义 data FormTree Empty Node FormTree FormTree deriving Show 我想编写一个函数 它生成一个无限列表 其中包含按长度排序的所有可能的树 例如节点数量 下面的代码几乎满足
  • 如何在核心数据中应用group by子句

    我正在实现 tableview 我想在 tableview 部分显示类名 并且我正在尝试获取 使用核心数据实现的数据库中的类值 我想使用类名上的 group by 子句获取数据 这是我的代码 AppDelegate appDelegate
  • Android Studio同时为同一个项目构建两个应用程序

    我正在使用 Android Studio v0 5 9 制作一个应用程序 它有一个图书馆项目作为依赖 但是 每次我运行该项目时 都会将两个具有相同名称和图标的 APK 部署到我的设备上 第一个 apk app 包含我的主模块 而第二个是库项
  • 如何将多个请求传输到 Firebase 以同时从多个节点获取数据

    我需要从 Firebase 数据库中的 4 个节点检索数据 根据设计 在 firebase 中 这只能通过触发 4 个查询来完成 就我而言 这 4 个查询是独立的 因为我已经知道每个查询的路径 我可以同时触发它们 我从 Frank van
  • 有没有办法在 Spring Boot 应用程序配置中使用 Spring Cloud {cipher} ?

    我有一个使用 Spring Cloud Config 的 Spring Boot 应用程序 但我想在 Spring Boot 应用程序 bootstrap yml 文件中加密 Spring Cloud Config 密码 有没有办法做到这一
  • smoothScrollToPosition() 在 Android ICS 中只能滚动到一半?

    在 Gingerbread 中 我使用 smoothScrollToPosition 一次滚动数十个项目没有任何问题 在我的 Nexus S 升级到 Ice Cream Sandwich 后 我注意到无论我在 smoothScrollToP
  • 在源代码和预编译二进制文件之间切换

    我们的应用程序中有大量的库 库是用 C 或 C 编写的 平台 net Framework Windows 64 位 将所有内容编译为源代码需要花费大量时间 我们正在考虑切换到预构建的二进制文件 但我们仍然希望保留返回源代码的可能性 作为版本
  • 枚举nodejs中的系统驱动器

    有没有办法检索计算机上所有逻辑驱动器的驱动器名称 我查看了 fs api 但从那里我只能枚举给定目录的文件和目录 我不确定 驱动器名称 是什么意思 如果您的意思是以下形式的驱动器 PhysicalDriveN 我遇到了同样的问题并实现了这个
  • 在 asp.net MVC 控制器中调用异步外部 Web 服务

    在 Asp net MVC 控制器 GET 方法 中 我调用外部 Web 服务 用于 IP 地理定位 返回 IP 位置的 json 数据 如何使调用异步 以便堆栈可以在等待服务响应时继续 当 GEO IP 请求完成后 我希望能够更新数据库