【问题标题】:Calling asp.net webApi through restclient throws exception "Reference to undeclared entity 'nbsp'. Line 69, position 41."通过restclient调用asp.net webApi会抛出异常“引用未声明的实体'nbsp'。第69行,位置41。”
【发布时间】:2017-11-16 00:44:11
【问题描述】:

我正在使用以下代码通过 RestSharp 从 C# 代码调用 Asp.net WebApi

 RestClient Client = new RestClient();

                Client.BaseUrl = new Uri("http://localhost:27156");
                var request = new RestRequest("api/GetUserName", Method.POST);
                UserDto user = new UserDto { Ldap = "rahkuma"};
                request.AddHeader("Accept", "application/json");
                request.RequestFormat = DataFormat.Json;

                //request.AddJsonBody(user);
                request.AddBody(user);
                var response = Client.Execute<UserDto>(request);

服务抛出 StatusCode : NotFound 和 ErrorException “引用未声明的实体 'nbsp'。第 69 行,第 41 位。” 我可以从 AngularJs 使用它,但从 C#(WebForm) 使用 restclient 它会抛出异常。 对此的任何帮助将不胜感激。 Web API 控制器代码如下

[HttpPost]
    public ResponseModel<UserDto> GetUserName(UserDto user)
    {
        string Role = "Read";


        ResponseModel<UserDto> response = null;
        try
        {
            var res = _accountLogic.GetUserName(new UserDto { Ldap = Utilities.Decrypt(user.Ldap) });

            if (res != null)
            {
                res.Ldap = user.Ldap;
                var roleDetail = _accountLogic.GetUserRoles(res.EmpLdap);
                if (roleDetail != null)
                {
                    res.Role = roleDetail.Role;
                    res.LockEdit = roleDetail.LockEdit;
                    res.ManagementAdjPlug = roleDetail.ManagementAdjPlug;
                }

                response = new ResponseModel<UserDto>();
                response.Data = res;
                response.ResponseStatus = Common.Enums.ResponseStatus.Sucess;
            }

        }
        catch (Exception ex)
        {

            response = new ResponseModel<UserDto>();
            response.ResponseStatus = Common.Enums.ResponseStatus.Error;
            response.ErrorMessage = ex.Message;
            throw ex;
        }


        return response;
    }

我也在下面附上异常详情图片

【问题讨论】:

  • 你能显示你正在点击的控制器的代码吗?
  • 嗨丹尼尔,我已经添加了控制器代码。使用 angularjs 使用它时工作正常,但使用 c# 它不起作用
  • 1.您显示的代码中的第 69 行是哪一行? 2. 能不能展示下AngularJS代码正常工作?
  • 嗨,下面的角代码玛丽亚工作正常 var _getUserInfo = function (sldap) { var deferred = $q.defer(); $http({ method: 'POST', url: serviceBase + 'Account/GetUserName', data: JSON.stringify({ Ldap: sldap }), headers: { 'Content-Type': 'application/json' } }) .success(function (response) { _Appuser = response.Data; deferred.resolve(response); }).error(function (err, status) { deferred.reject(err); });返回 deferred.promise; }
  • @rahulrathore 我认为更相关的问题是 Maria 的第一个问题:“你展示的代码中的第 69 行是哪一行?”

标签: c# asp.net-web-api rest-client


【解决方案1】:

原因是请求 URL 中缺少 Api 控制器名称

当我从var request = new RestRequest("api/GetUserName", Method.POST);更改它时

致此var request = new RestRequest("api/Account/GetUserName", Method.POST);

它工作正常。完整代码如下

 Client.BaseUrl = new Uri("http://localhost:27156");
            var request = new RestRequest("api/Account/GetUserName", Method.POST);
            UserDto user = new UserDto { Ldap = "rahkuma"};
            request.AddHeader("Accept", "application/json");
            request.RequestFormat = DataFormat.Json;

            //request.AddJsonBody(user);
            request.AddBody(user);
            var response = Client.Execute<UserDto>(request);

这是我的一个愚蠢的错误,感谢所有支持和帮助我的人

【讨论】:

    【解决方案2】:

    您能否尝试对您的请求进行这些修改,看看是否有帮助:

    RestClient Client = new RestClient("http://localhost:27156");
    var request = new RestRequest("api/GetUserName", Method.POST);
    UserDto user = new UserDto { Ldap = "rahkuma"};
    request.Method = Method.POST;
    request.AddHeader("Accept", "application/json");
    request.RequestFormat = DataFormat.Json;
    request.Method = Method.POST;
    
    //request.AddJsonBody(user);
    //request.AddBody(user);
    request.AddParameter("application/json", user, ParameterType.RequestBody);
    var response = Client.Execute<UserDto>(request);
    

    已编辑:

    //request.AddJsonBody(user);
    request.AddBody(user);    //same as your original
    //request.AddParameter("application/json", user, ParameterType.RequestBody);
    var response = Client.Execute(request); //modified
    

    然后在其后放置一个断点,或者显示响应,看看究竟返回了什么。

    【讨论】:

    • 尝试了您的请求,但仍然是同样的异常。
    • 嗯,你可以试试修改吗?
    • 错误是我这边的,它在 URL 中缺少控制器名称
    猜你喜欢
    • 2019-01-03
    • 2013-05-05
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 2010-09-21
    • 1970-01-01
    • 2012-10-12
    相关资源
    最近更新 更多