【问题标题】:Call a rest web api in asp.net and receive error在 asp.net 中调用 rest web api 并收到错误
【发布时间】:2021-11-17 18:39:05
【问题描述】:

您好,我想调用一个 rest Web Api,我使用 asp.net MVC+Web Api。 我写了一个如下的获取令牌方法:

      public TokenViewModel GetToken()
    {
        //string Result = string.Empty;
        TokenViewModel token = null;
        string baseAddress = "http://$$$$$$$$$$/api/security/login";
        using (HttpClient client = new HttpClient())
        {
            try
            {
                var url = new Uri(baseAddress);
                MultipartFormDataContent form = new MultipartFormDataContent();
                Dictionary<string, string> parameters = new Dictionary<string, string>();
                parameters.Add("UserName", "###");
                parameters.Add("Password", "$$$");
                HttpContent DictionaryItems = new FormUrlEncodedContent(parameters);
                form.Add(DictionaryItems, "model");


                var response = client.PostAsync(url.ToString(), form,            System.Threading.CancellationToken.None);

                if (response.Result.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    //Get body
                    var bodyRes = response.Result.Content.ReadAsStringAsync().Result;
                    token = JsonConvert.DeserializeObject<TokenViewModel>(bodyRes);
                    //Get Header
                    //   var headers = response.Result.Headers.GetValues("appToken");
                }
                else
                {
                    var a = response.Result.Content.ReadAsStringAsync().Result;
                }
            }
            catch (Exception ex)
            {

            }
            return token;

        }

    }

还有 webController:

  namespace WebAPI.Controllers
{

public class WebApiController : ApiController
{
    private readonly GetToken_BLL _tokenService;
    public WebApiController(GetToken_BLL tokenService)
    {

        _tokenService = tokenService;
    }

    public object Verfiybll { get; private set; }

    public class stcAPIMessage
    {
        public string Message { get; set; }
        public HttpStatusCode StatusCode { get; set; }
    }

  [HttpPost]
  [Route("api/Token")]
    public IHttpActionResult Token()
    {
        stcAPIMessage message = new stcAPIMessage();
        GetToken_BLL tokenbll = new GetToken_BLL();
        var result = tokenbll.GetToken();

        if (result == null)
        {
            message.Message = "error in recieveing token";
            message.StatusCode = HttpStatusCode.BadRequest;
            return Content(message.StatusCode, message.Message);
        }
        else if (string.IsNullOrEmpty(result.Token))
        {
            message.Message = "Error";
            message.StatusCode = HttpStatusCode.BadRequest;
            return Content(message.StatusCode, message.Message);
        }
        return Ok(result);
     }

  }
}

当我运行程序时它抛出错误:

尝试创建类型为“Web ApiController”的控制器时出错。 确保控制器有一个无参数的公共构造函数。 系统。无效的操作异常类型'WebAPI.Controllers。 Web ApiController' 没有默认构造函数 系统。

【问题讨论】:

  • 你也可以发布控制器吗,请和 ecurity/login api 标头。
  • 我按照你的意愿复制了我的整个控制器!
  • 谢谢,也显示登录 Api。
  • 对不起,我写了一个获取令牌的方法和一个 Web api 来调用该方法以及一个用于输出的视图(令牌视图模型)

标签: asp.net post controller token webapi


【解决方案1】:

parameterless constructor 错误在使用依赖注入的 ASP.NET Web 应用程序中很常见。

我注意到有一个构造函数参数被使用:

GetToken_BLL _tokenService

使用 GetToken_BLL 类型的依赖注入解析器,以便可以实例化参数 _tokenService。

【讨论】:

    猜你喜欢
    • 2021-11-07
    • 2019-02-28
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    相关资源
    最近更新 更多