Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取NegotiatedContentResult的状态代码_C#_Asp.net Web Api2 - Fatal编程技术网

C# 获取NegotiatedContentResult的状态代码

C# 获取NegotiatedContentResult的状态代码,c#,asp.net-web-api2,C#,Asp.net Web Api2,如何检查来自此IHttpActionResult的NegotiatedContentResult是否具有Ok状态代码 例如if(ValidateRegistrationStep3(accountModel)=Ok(){code to run} var result = ValidateRegistrationStep3(accountModel); 如果在Locals中检查result,它的值为System.Web.Http.Results.NegotiatedContentResult类型为

如何检查来自此
IHttpActionResult
NegotiatedContentResult
是否具有
Ok状态代码

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

var result = ValidateRegistrationStep3(accountModel);
如果在
Locals
中检查
result
,它的
值为
System.Web.Http.Results.NegotiatedContentResult
类型为
System.Web.Http.IHttpActionResult{System.Web.Http.Results.NegotiatedContentResult}
,状态为
OK
。如何检查
状态代码

[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()); }
然后可以从
控制器中调用helper方法,并检查其返回

if (ValidateRegistrationStep1Inner(accountModel).Count == 0 &&
            ValidateRegistrationStep2Inner(accountModel).Count == 0 &&
            ValidateRegistrationStep3Inner(accountModel).Count == 0)
要回答您的问题,您需要执行结果

public async Task<HttpStatusCode> GetResult()
{
    var response = ValidateRegistrationStep3(accountModel);
    var result = await response.ExecuteAsync(new CancellationToken());
    var statusCode = result.StatusCode;

    return statusCode;
}

你在哪里这样调用控制器操作?您将无法获取状态代码,因为操作正在返回
IHttpActionResult
not
NegotiatedContentResult
请参阅我的更新问题。如何检查IHttpActonResult的状态码?异步方法不实用,但将验证码分解为一个帮助器方法,然后调用和检查它可以避免最初的问题。在OP中查看我的解决方案。
public async Task<HttpStatusCode> GetResult()
{
    var response = ValidateRegistrationStep3(accountModel);
    var result = await response.ExecuteAsync(new CancellationToken());
    var statusCode = result.StatusCode;

    return statusCode;
}
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)
        {
            ...
        }
    }
}