Ссылка на объект null - перезапись URL asp.net - PullRequest
4 голосов
/ 31 марта 2011

Я разработал свой сайт asp.net в .NET 2.0 в другой системе, где он работает нормально.Теперь, когда я скопировал сайт asp.net в свою систему и запустил его, я получаю ошибку времени выполнения:

Ссылка на объект не установлена ​​на экземпляр объекта.

 public class FixURLs : IHttpModule 
{
    public FixURLs()
    {

    }

    #region IHttpModule Members

    public void Dispose()
    {
        // do nothing
    }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(context_BeginRequest);
        context.CompleteRequest(); 

    }

 ..... some other logic

Я получаю ошибку ссылки на объект в строке:

context.CompleteRequest();

В моем файле web.Config есть

<compilation debug="true">
  <assemblies>
    <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </assemblies>
</compilation>

Как я могу исправить эту проблему?

РЕДАКТИРОВАТЬ Редактировать заметку Добавлен новый код

 void context_BeginRequest(object sender, EventArgs e)
{


    HttpApplication app = (HttpApplication)sender;

    if (app.Request.RawUrl.ToLower().Contains("/bikes/default.aspx"))
    {
        app.Context.RewritePath("BikeInfo.aspx", "", "");
    }
    else if (app.Request.RawUrl.ToLower().Contains("/bikes/mountainbike.aspx"))
    {
        app.Context.RewritePath("BikeInfo.aspx", "", "ItemID=1");
    }
 }

Ответы [ 3 ]

4 голосов
/ 06 апреля 2011

Я сильно подозреваю, что вы захотите поместить completerequest в конец метода context_beginrequest, потому что сейчас это не имеет смысла.Если это не так, пожалуйста, опубликуйте этот метод, чтобы было ясно, что вы пытаетесь сделать.

РЕДАКТИРОВАТЬ: похоже, вы намереваетесь сделать это:

 void context_BeginRequest(object sender, EventArgs e)
{

    HttpApplication app = (HttpApplication)sender;

    if (app.Request.RawUrl.ToLower().Contains("/bikes/default.aspx"))
    {
        app.Context.RewritePath("BikeInfo.aspx", "", "");
        app.CompleteRequest(); 
    }
    else if (app.Request.RawUrl.ToLower().Contains("/bikes/mountainbike.aspx"))
    {
        app.Context.RewritePath("BikeInfo.aspx", "", "ItemID=1");
        app.CompleteRequest(); 
    }
 }

Не похоже, что вы захотите вызвать CompleteRequest, если вы на самом деле не делаете что-то в BeginRequest.И чтобы быть ясным, в вашем исходном коде вы вызываете CompleteRequest до того, как событие BeginRequest даже сработает.

0 голосов
/ 02 января 2017

void context_BeginRequest (отправитель объекта, EventArgs e) {

HttpApplication app = (HttpApplication)sender;

if (app.Request.RawUrl.ToLower().Contains("/bikes/default.aspx"))
{
    app.Context.RewritePath("BikeInfo.aspx", "", "");
    app.CompleteRequest(); 
}
else if (app.Request.RawUrl.ToLower().Contains("/bikes/mountainbike.aspx"))
{
    app.Context.RewritePath("BikeInfo.aspx", "", "ItemID=1");
    app.CompleteRequest(); 
}
}
0 голосов
/ 12 апреля 2011

Я думаю, вы должны просто пропустить свой звонок на context.CompleteRequest();

Обычно это означает, что нужно остановить выполнение запроса, но вы вызываете его, когда ваше приложение инициализируется, а запросы не обрабатываются. Я предположил, что в .NET 2.0 он будет терпеть этот вызов и не будет делать ничего плохого, но в более поздней версии он взрывается.

Мне не кажется, что вы хотите остановить запрос сразу после того, как переписали URL-адреса ... в противном случае, зачем их даже переписывать? Так что просто попытайтесь избавиться от вызова этого метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...