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);
}