复合C1 - 如何在InlineMethodFunction中重定向到404

时间:2014-05-06 21:52:09

标签: http httpresponse response.redirect c1-cms

我有一个复合网站,网址结构如下:

site.com/products / 1234 /产品名称

粗体部分是页面位置。 1234 是产品ID,然后产品名称只是一个slug。

我注册了PathInfo,并且我使用1234来读取SQL数据库并返回要在网站上显示的信息。我在名为productDetails的内联C#函数中执行此操作,该函数将XElement返回给XSLT函数。

有时,我们会停止使用我们的数据库中的产品或ID。在这些情况下,我想做的是做以下其中一项

  • 返回404
  • 使用网址重定向到我的404

然后我想通过电子邮件发送通知(或至少记录错误)。

目前,如果产品不存在,我只返回一个空的<product>元素。

我在InlineMethodFunction&gt;内尝试了以下代码'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
    //
  }
}

1 个答案:

答案 0 :(得分:0)

事实证明,我只能在外部功能中实现这一点。感谢PauliØ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。