我有一个复合网站,URL结构是这样的:
site.com/products /1234/产品名称
粗体部分为页面位置。1234是产品ID,而 Product -name只是一个字符。
我注册PathInfo,我使用1234
读取SQL数据库并返回信息以显示在网站上。我在一个名为productDetails
的内联c#函数中这样做,该函数将XElement
返回给XSLT函数。
有时,我们将停止生产产品或ID在我们的数据库中不存在。在这些情况下,我想做的是执行以下命令之一
- 返回404
- 用URL重定向到我的404
然后我想通过电子邮件发出通知(或至少记录错误)。
目前,如果产品不存在,我只返回一个空的<product>
元素。
我在InlineMethodFunction
> 'productDetails
方法中尝试了以下代码,但响应对象似乎不可用。理想情况下,我想将响应类型设置为404而不是重定向。什么好主意吗?:
public static class InlineMethodFunction
{
public static XElement productDetails( int BulkProductId ) {
ProductContext db = new ProductContext();
var products = db.ProductDetailsByBulkID(BulkProductId).ToList();
if (products.Count < 1)
{
// THIS doesn't work
Response.Redirect("~/404?ProductCode=" + BulkProductId.ToString());
HttpContext.Current.Response.Redirect("~/404?ProductCode=" + BulkProductId.ToString());
// ERROR RETURNED The name 'HttpContext' does not exist in the current context
}
//
// rest of code
//
}
}
事实证明,我只能在一个外部函数中完成这一点。向保利致敬Østerø!
对于那些感兴趣的…下面是实际使用的代码:
if(products.Count < 1){
HttpResponse response = HttpContext.Current.Response;
response.StatusCode = 404;
response.Status = "404 Not Found";
//
// Send mail to let someone know
//
}
没有重定向,我只是设置了404消息,URL保持不变,但有一个404。