C# 在void方法中重定向操作

C# 在void方法中重定向操作,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我知道我们不能在void方法中使用RedirectToAction,但是我如何绕过下面的场景呢。请参阅注释,这些注释很好地解释了该场景 public void CertificateVerification(string regNo) { try { var _dbRegn = _db.StudentRegistrations .Where(r => r.RegistrationNumber == regNo)

我知道我们不能在
void
方法中使用
RedirectToAction
,但是我如何绕过下面的场景呢。请参阅注释,这些注释很好地解释了该场景

public void CertificateVerification(string regNo)
{
    try
    {
        var _dbRegn = _db.StudentRegistrations
                    .Where(r => r.RegistrationNumber == regNo)
                    .FirstOrDefault();
        //checking if registration exist
        if (_dbRegn != null)
        {
            var _isCertificateIssued = _dbRegn.IsCertificateIssued.Value;
             //checking if certificate issued
            if (_isCertificateIssued)
            {
                string FilePath = Server.MapPath("~/Certificates/" + _dbRegn.RegistrationNumber + ".pdf"); ;
                WebClient User = new WebClient();
                Byte[] FileBuffer = User.DownloadData(FilePath);
                if (FileBuffer != null)
                {
                    Response.ContentType = "application/pdf";
                    Response.AddHeader("content-length", FileBuffer.Length.ToString());
                    Response.BinaryWrite(FileBuffer);
                    Response.End();
                }
            }
            //if certificate not issued then redirect to specific page
            else
            {
                 RedirectToAction("CertificateNotApproved");
            }
        }
        //if registration dont exist redirect to specific page
        else
        {
             RedirectToAction("CertificateDontExist");
        }
    }
    catch (Exception ex)
    {
        RedirectToAction("CertificateDontExist");
    }
}

重写该方法,使其符合您的要求

public bool IsCertificateValid(string regNo, string redirectTo)
{
    redirectTo = null;
    try
    {
        var _dbRegn = _db.StudentRegistrations
                    .Where(r => r.RegistrationNumber == regNo)
                    .FirstOrDefault();
        if (_dbRegn != null)
        {
            var _isCertificateIssued = _dbRegn.IsCertificateIssued.Value;
            if (_isCertificateIssued)
            {
              // unimportant code...
            }
            else
            {
                 redirectTo = "CertificateNotApproved";
            }
        }
        else
        {
             redirectTo = "CertificateDontExist";
        }
    }
    catch (Exception ex)
    {
        redirectTo  = "CertificateDontExist";
    }

    return !string.IsNullOrEmpty(redirectTo);
}
用法:

string redirectTo;
if (!IsCertificateValid(regNo, out redirectTo)
{
  return RedirectToAction(redirectTo);
}