2009-05-14 20 views
12

Bunun bir MVC web sitesinde olup olmadığına dair bir ilgim olup olmadığını bilmiyorum ama yine de bundan bahsederdim. Benim ImageHandler sınıfını içeren bir klasör adında Eylemciler sahip Sitesi projesindeÖzel HttpHandler ateşlemiyor, ASP.NET MVC Uygulamasında 404 döndürüyor

<add verb="*" path="*.imu" type="Website.Handlers.ImageHandler, Website, Version=1.0.0.0, Culture=neutral" /> 

: Benim web.config içinde

Ben bu satırları var. O (ı ProcessRequest kodu kaldırdık)

using System; 
using System.Globalization; 
using System.IO; 
using System.Web; 

namespace Website.Handlers 
{ 
    public class ImageHandler : IHttpHandler 
    { 
     public virtual void ProcessRequest(HttpContext context) 
     { 
      //the code here never gets fired 
     } 

     public virtual bool IsReusable 
     { 
      get { return true; } 
     } 
    } 
} 

Web sitemi çalıştırın ve yalnızca 404 hatası döndürür /something.imu giderseniz buna benzer.

Visual Studio 2008 kullanıyorum ve bunu ASP.Net geliştirme sunucusunda çalıştırmaya çalışıyorum.

Birkaç saat aradım ve ayrı bir web sitesinde çalışıyordum. Bu yüzden neden mevcut bir web sitesinde çalışmadığını anlamıyorum. * .imu yol btw'ye başka referans yok.

cevap

32

Bunun, MVC kullandığınız gerçeği ile ilgili her şeye sahip olduğundan şüpheleniyorum, temel olarak tüm gelen isteklerin kontrolünü ele alıyor.

Yönlendirme tablosunu kullanmanız ve muhtemelen yeni bir yöneltme işleyicisi oluşturmanız gerektiğinden şüpheleniyorum. Bunu kendim yapmadım ama böyle bir şey işe yarayabilecek:

void Application_Start(object sender, EventArgs e) 
{ 
    RegisterRoutes(RouteTable.Routes); 
} 

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.Add(new Route 
    (
     "{action}.imu" 
     , new ImageRouteHandler() 
    )); 
} 

ve web üzerinde örneklere bakarak o yüzden bunu değiştirmek iyi olabilir rağmen daha sonra ImageRouteHandler sınıf, ardından özel ImageHttpHandler dönecektir Düz IHttpHandler yerine MvcHandler uygular.

Düzenleme 1: Peter comment gereğince, ayrıca IgnoreRoute yöntemini kullanarak uzantısı yok sayabilirsiniz: güzel

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.imu/{*pathInfo}"); 
} 
+4

Dur, bana doğru yönde koymak! Bu satırı RegisterRoutes yöntemine ekledim, bu da MVC'nin isteği ele almasını durduracak: routes.IgnoreRoute ("{resource} .imu/{* pathInfo}"); – Peter

+1

Tüm yollardaki uzantıyı yok saymak istiyorsanız, rotalar.IgnoreRoute ("{* allimu}", new {allimu = @ ". * \. Imu (/.*)?"}); phill haack'den http://haacked.com/archive/2008/07/14/make-routing-ignore-requests-for-a-file-extension.aspx/ – jsturtevant