c# - 与通用处理程序交互

标签 c# request response generic-handler

我在 C# 中有这个通用处理程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace RequestResponse
{
    public class Handler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string function = context.Request.QueryString["function"];

            Methods m = new Methods();

            if(function.Equals("addition"))
            {
                int num1 = Convert.ToInt32(context.Request.QueryString["num1"]);
                int num2 = Convert.ToInt32(context.Request.QueryString["num2"]);
                int answer = m.addition(num1, num2);
                context.Response.Write(answer);
            }

            if (function.Equals("subtraction"))
            {
                int num1 = Convert.ToInt32(context.Request.QueryString["num1"]);
                int num2 = Convert.ToInt32(context.Request.QueryString["num2"]);
                int answer = m.subtraction(num1, num2);
                context.Response.Write(answer);
            }

            if(function.Equals("reverseString"))
            {
                string text = context.Request.QueryString["text"];
                text = m.reverseString(text);
                context.Response.Write(text);
            }

            if (function.Equals("CalculateMD5Hash"))
            {
                string text = context.Request.QueryString["text"];
                text = m.CalculateMD5Hash(text);
                context.Response.Write(text);
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

我也有这个客户端应用程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;

namespace Client
{
    public partial class HomePage : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (TextBox_Function.Text.Equals("addition"))
            {
                int num1 = Convert.ToInt32(TextBox_Num1.Text);
                int num2 = Convert.ToInt32(TextBox_Num2.Text);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:4000/Handler.ashx?function=" + TextBox_Function.Text + "&num1=" + num1 + "&num2=" + num2);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                String answer = response.ToString();
                Session["answer"] = answer;
                Response.Redirect("Results.aspx");
            }

            if (TextBox_Function.Text.Equals("subtraction"))
            {
                int num1 = Convert.ToInt32(TextBox_Num1.Text);
                int num2 = Convert.ToInt32(TextBox_Num2.Text);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:4000/Handler.ashx?function=" + TextBox_Function.Text + "&num1=" + num1 + "&num2=" + num2);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                String answer = response.ToString();
                Session["answer"] = answer;
                Response.Redirect("Results.aspx");
            }

            if (TextBox_Function.Text.Equals("reverseString"))
            {
                String text = TextBox_Text.Text;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:4000/Handler.ashx?function=" + TextBox_Function.Text + "&text=" + text);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                String answer = response.ToString();
                Session["answer"] = answer;
                Response.Redirect("Results.aspx");
            }

            if (TextBox_Function.Text.Equals("CalculateMD5Hash"))
            {
                String text = TextBox_Text.Text;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:4000/Handler.ashx?function=" + TextBox_Function.Text + "&text=" + text);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                String answer = response.ToString();
                Session["answer"] = answer;
                Response.Redirect("Results.aspx");
            }
        }
    }
}

现在,让我们假设在我的客户端应用程序中,我提供“加法”作为函数,“3”作为 num1,“5”作为 num2。

为什么生成的答案(存储在变量 answer 中)是:

System.Net.HttpWebResponse

我做错了什么?请耐心等待,因为我从未以这种方式在两个应用程序之间进行过通信。

最佳答案

问题出在这里:

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
String answer = response.ToString();

您只是在 HttpWebResponse 上调用 ToString(),而您真正可能想做的是获取响应的主体 - 你会用这样的东西来做:

// It's important to dispose of responses...
using (var response = request.GetResponse())
{
   using (var reader = new StreamReader(response.GetResponseStream()))
   {
       string answer = reader.ReadToEnd();
   }
}

关于c# - 与通用处理程序交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16003592/

相关文章:

c# - 在 ASp.net 中动态添加数据到 gridview

javascript - Node.js - 使用 cookie 的多个请求

javascript - 如何在 React 中处理获取 API AJAX 响应

javascript - 尝试将工作表行数据发送到 GmailApp 时缺少变量名称; Javascript/Google 应用程序脚本

c# - 存储库项 lookUpEdit 在失去焦点后重置

c# - Bootstrap CSS 不适用于 ASP.net

c# - *虚拟*方法缺少 'await' 返回值?

node.js - 使用 request、gridfs-stream 和 multer 的 POST 文件

python - 在 python 中使用 requests.post 发送文件名中包含 Unicode 字符的文件

c# - 如何使用 IHttpActionResult 对 Created-201 响应进行编码