【问题标题】:How can I use c# asp.net to get data from url?如何使用 c# asp.net 从 url 获取数据?
【发布时间】:2019-01-30 12:29:37
【问题描述】:

我正在尝试在我的 c# asp.net 后端中获取我通过表单发送到 angularJS 的一些信息,但我在执行此操作时遇到了麻烦。

Visual Studio 不允许我编译,因为它说:

错误 CS0120:非静态字段、方法或属性“成员”需要对象引用

那是我的控制器

public class SearchController : ApiController
{
    public string Get()
    {
        string test = HttpContext.Request.QueryString["txt_search"];
        return test;
    }

}

这是我在 angularjs 中得到的:

$scope.sendForm = function () {
    console.log($scope.model.search);
    $http({
        method: 'GET',
        url: '/api/search?txt_search=' + $scope.model.search
    })
    .then(function () {
        console.log('sucesso a executar o post');
    }, function () {
           console.log('Erro ao executar o post');
       });
};

【问题讨论】:

  • 网络检查员对您浏览器中的请求有何看法?另外,您似乎在问如何使用 ASP.NET return 数据,而不是 get 数据?或者您是在问如何 C# 向另一个网站发出请求,然后将其返回给您的客户?
  • 我用来获取数据,但我回来只是为了检查它是否有效。实际上它是一个搜索按钮,我需要在后端过滤我的数据并将其返回到前面以显示用户。 Visual Studio 不允许我编译,因为它显示错误 CS0120:非静态字段、方法或属性“成员”需要对象引用@John
  • 你不能在 Get 方法中添加一个参数string txt_search 吗?如果 URL 中有值,它应该自动映射。
  • 你能把完整的代码发给我吗?您必须使用静态方法并访问其中的非静态字段
  • @ShanakaRusith 它工作了,谢谢,但由于某种原因,其中一个请求返回错误,说它只是 localhost:63318/api/search,然后其中 3 个正确返回 localhost:63318/api/search?txt_search=asd,为什么它返回4 次,其中一次不使用 ?txt_search 的东西?

标签: javascript c# asp.net angularjs asp.net-web-api


【解决方案1】:

按照 cmets 中的建议,您应该能够更改您的方法定义并完全跳过它:

public string Get(string txt_search)
{
    return txt_search;
}

或者,要引用当前请求,我相信您需要使用以下内容(注意添加.Current):

string test = HttpContext.Current.Request.QueryString["txt_search"];

原因是HttpContextRequest 定义为instance 属性。唯一的公共 static 属性是Current,它返回一个HttpContext 的实例,您可以通过它访问Request

【讨论】:

    【解决方案2】:

    欢迎来到 Stack Overflow,

    你的 Angular 代码是正确的

    你需要在服务器端传递一个参数来收集txt_search

    这里是:

    [HttpGet]
    [Route("/api/search")]
    public string mySearchMethod(string txt_search)
    {
        //something here with txt_search
        return "OK";
    }
    

    【讨论】:

      【解决方案3】:

      上述两种解决方案都可以使用,但是对于您使用 asp.net web api 和路由器的另一种方法,您也可以按照以下方式进行

      在您的 Angular 代码中,简单地传递如下搜索

      ```

      $scope.sendForm = function () {
          console.log($scope.model.search);
          $http({
              method: 'GET',
              url: '/api/search/'+ $scope.model.search
          })
          .then(function () {
              console.log('sucesso a executar o post');
          }, function () {
                 console.log('Erro ao executar o post');
             });
      };
      

      ```

      通知 url: '/api/search/'+ $scope.model.search

      并改变 Action 方法如下

      ```

      [HttpGet]
      [Route("/api/search/{txt_search}")]
      public string mySearchMethod(string txt_search)
      {
          //something here with txt_search
          return "OK";
      }
      

      ```

      通过这样做,您不必担心参数名称txt_search 无论您在路由[Route("/api/search/{txt_search}")] 中提到什么,您都将获得相同参数中的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-17
        • 1970-01-01
        • 2017-10-09
        • 1970-01-01
        • 1970-01-01
        • 2022-10-15
        相关资源
        最近更新 更多