我有一个 MVC 5 应用程序,其中包含一个发出 HTTP 请求的控制器操作。为此,我使用 HttpClient。
我已经学会从别人(比如这个博客帖子),并从我自己的经验,并能同时instantating众多HttpClients可以有不只是应用程序,但在服务器整体的性能产生负面影响。
到目前为止,我可以通过这样的代码解决重用 HttpClient 实例的要求
using (var handler = new HttpClientHandler() { Credentials = new NetworkCredential(getUsername(), getHashedPassword())})
using (var client = new HttpClient(handler))
{
// Long running loop that makes a different HTTP request
// on each iteration but using the same HttpClient instance
}
Run Code Online (Sandbox Code Playgroud)
需要在控制器操作中进行类似的重用,我选择在控制器类中使用 HttpClient 的静态实例。问题是传递给 HttpClientHandler 的凭据随着每个请求而变化,因为它们部分依赖于时间戳值(getHashedPassword()每次调用该方法时都会生成不同的密码)。
由于在远程服务器上执行身份验证的方式,我还必须在构成请求正文的 XML 内容中包含密码。
这就是我遇到问题的地方:
如何在对控制器操作的不同调用中重用相同的 HttpClient 实例,同时确保它使用具有最新凭据的处理程序?
甚至有可能做到这一点吗?
是否可以在将处理程序传递给 HttpInstance 后更新它?
或者我是否需要修改客户端对象的 DefaultRequestHeaders,如果不同线程同时使用该对象,根据某些来源可能会引入微妙的错误?
我只是在学习C,这是我第一次使用stackoverflow,所以我不确定这是否是问这个问题的权利,因为它与周围的其他人相比似乎微不足道,但我在教科书中找到了这段代码,当我尝试在Visual Studio中编译我得到这个:
**error C2040: 'menutext' : 'char *(int)' differs in levels of indirection from 'int ()'**
Run Code Online (Sandbox Code Playgroud)
说实话,我已经查看了代码,但我不知道为什么编译器会抱怨.我真的需要一些帮助.这是代码:
/*********************************************************/
/* */
/* MENU : program which prints out a menu */
/* */
/*********************************************************/
main ()
{
int str_number;
for (str_number = 0; str_number < 13; str_number++)
{
printf ("%s",menutext(str_number));
}
}
/*********************************************************/
char *menutext(int n) /* return n-th string ptr */
{
static char *t[] =
{
" -------------------------------------- \n",
" | ++ MENU ++ |\n",
" | …Run Code Online (Sandbox Code Playgroud)