首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取StatusCode of NegotiatedContentResult

获取StatusCode of NegotiatedContentResult
EN

Stack Overflow用户
提问于 2018-02-09 17:16:47
回答 1查看 2.1K关注 0票数 4

如何检查来自此NegotiatedContentResultIHttpActionResult是否有Ok StatusCode

例如。if (ValidateRegistrationStep3(accountModel) == Ok()) { code to run }

代码语言:javascript
复制
var result = ValidateRegistrationStep3(accountModel);

如果您检查result in Locals,它有一个Value of System.Web.Http.Results.NegotiatedContentResult<string> of Type System.Web.Http.IHttpActionResult {System.Web.Http.Results.NegotiatedContentResult<string>}和一个StatusCode of OK。如何检查StatusCode

代码语言:javascript
复制
[HttpPost]
[Route("register/validate3")]
public IHttpActionResult ValidateRegistrationStep3(
            [FromBody]AccountRegisterModel accountModel) {
    List<string> errors = new List<string>();

    if (!IsDigits(accountModel.CreditCard, 16)) errors.Add("CreditCard needs to be 16 digits.");

    var regExp = @"^(0[1-9]|1[0-2])\/[0-9]{2}$";
    if (!Regex.IsMatch(accountModel.ExpDate, regExp, RegexOptions.IgnoreCase))
                    errors.Add("Expiration Date is not valid format (MM/YY)");

    if (errors.Count == 0) return Content(HttpStatusCode.OK, "Register Model-3 Valid");
    else return Content(HttpStatusCode.BadRequest, errors.ToArray()); }

解决方案:

将验证代码分解到助手方法,然后从IHttpActionResult中调用它。

代码语言:javascript
复制
[HttpPost]
[Route("register/validate3")]
public IHttpActionResult ValidateRegistrationStep3(
            [FromBody]AccountRegisterModel accountModel) {
    List<string> errors = ValidateRegistrationStep3Inner(accountModel);

    if (errors.Count == 0) return Content(HttpStatusCode.OK, "Register Model-3 Valid");
    else return Content(HttpStatusCode.BadRequest, errors.ToArray()); }

private List<string> ValidateRegistrationStep3Inner(AccountRegisterModel accountModel)
{
  List<string> errors = new List<string>();

  if (!IsDigits(accountModel.CreditCard, 16)) errors.Add("CreditCard needs to be 16 digits.");
  if (!string.IsNullOrWhiteSpace(accountModel.ExpDate)) {
    var regExp = @"^(0[1-9]|1[0-2])\/[0-9]{2}$";
    if (!Regex.IsMatch(accountModel.ExpDate, regExp, RegexOptions.IgnoreCase))
      errors.Add("Expiration Date is not valid format (MM/YY)");
  } else errors.Add("Expiration Date is required (MM/YY)");

  return errors; }

然后可以从Controller中调用helper方法,并检查它的返回。

代码语言:javascript
复制
if (ValidateRegistrationStep1Inner(accountModel).Count == 0 &&
            ValidateRegistrationStep2Inner(accountModel).Count == 0 &&
            ValidateRegistrationStep3Inner(accountModel).Count == 0)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-09 18:42:07

回答你的问题--你需要执行结果。

代码语言:javascript
复制
public async Task<HttpStatusCode> GetResult()
{
    var response = ValidateRegistrationStep3(accountModel);
    var result = await response.ExecuteAsync(new CancellationToken());
    var statusCode = result.StatusCode;

    return statusCode;
}

但是你不应该自己直接给控制器打电话。相反,将验证代码移动到一个单独的类(或者添加一个不涉及IHttpActionResult的新方法)。

代码语言:javascript
复制
public class RegistrationValidation : IRegistrationValidation
{
    public List<string> Validate(AccountRegisterModel model)
    {
        List<string> errors = new List<string>();

        ...

        return errors;
    }
}

public class RegistrationController : ApiController
{
    private readonly IRegistrationValidation validator;

    // with a DI container
    public RegistrationController(IRegistrationValidation validator)
    {
        this.validator = validator;
    }

    // without a DI container
    public RegistrationController()
    {
        this.validator = new RegistrationValidation();
    }

    public IHttpActionResult ValidateRegistrationStep3(AccountRegisterModel accountModel)
    {
        var errors = validator.Validate(accountModel);

        if (error.Count() == 0)
            return Content(HttpStatusCode.OK, "Register Model-3 Valid");
        ...
    }

    public IHttpActionResult FinishRegistration(AccountRegisterModel accountModel)
    {
        var errors = validator.Validate(accountModel);
        if (errors.Count() == 0)
        {
            ...
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48710962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档