刚开始学习MonoRail的时候,一直搞不清楚URL与调用的Controller是如何对应了,经过一番实验分析后,得出以下结论。

一个http请求是与如何工作的呢?请看以下实例,我们将浏览器发出的请求URL分层四段。

http://localhost/guestbook/user/admin/index.castle

1       2        3      4

第一段“guestbook/user”由Controller的ControllerDetails Attribute决定,设置为Area属性为“guestbook/user”的Controller才有可能会被调用。

第二段“admin”决定系统会调用AdminController类,类的Namespace和大小写与此无关。但是 ControllerDetails的Area属性必须匹配才行。该值的大小写无关。

第三段“index”决定系统会调用GuestBookController的Index公共方法,该值与大小写无关。

第四段“castle”是由web.config配置文件决定的,在<system.web/><httpHandlers/>配置节中,MonoRail需要添加以下配置才能正常工作。其中“path”决定了访问URL的扩展名,这里我们设置的是“*.castle”,你可以修改为你喜欢的名字。不过你想设置在IIS中配置过的名称比如“*.html”,就需要修改IIS配置了。

Web.config <system.web/><httpHandlers/>节中的MonoRail配置项:

<add verb="*" path="*.castle" type="Castle.MonoRail.Framework.MonoRailHttpHandlerFactory, Castle.MonoRail.Framework" />

GuestBookController类:

[ControllerDetails(Area = "guestbook/user")]
public class AdminController : Controller
{
      public void Index()
      {
      }
}

引申问题,如果请求http://localhost/guestbook/index123.castle这样的路径,由于GuestBookController没有Index123这个方法,当我们调用一个不存在的公共方法时会出现异常。希望通过友好的方式显示错误信息或者重定向到另一个存在的页面时,可以使用[DefaultAction()]来描述GuestBookController类。

[DefaultAction()]
public class GuestBookController : BaseController
{
    public void DefaultAction()
    {
    }
}

http://localhost/guestbook/index123.castle会调用DefaultAction()方法。

或者

[DefaultAction("Index")]
public class GuestBookController : BaseController
{
    public void Index()
    {
    }
}

http://localhost/guestbook/index123.castle会调用Index()方法。

现在还没有解决的问题,调用http://localhost/index.castle这样的URL会出异常。不知道那位朋友知道如何解决,请告知。

经过一番Google,终于找到实现调用http://localhost/index.castle这样的路径的方法了。在web.config monorail配置节中,增加defaultUrls的配置即可。

    <monorail smtpHost="yoursmtphost" useWindsorIntegration="false">
    <defaultUrls>
      <add url="index.castle" controller="guestbook" action="index" area="" />
    </defaultUrls>

如果希望http://localhost/也能正常访问的话,有个简单的办法,在网站根目录下建立一个default.aspx文件。内容如下:

<%@ Page Language="C#" %>
<script runat="server">
  protected override void OnLoad(EventArgs e)
  {
    Response.Redirect("/index.castle");
    base.OnLoad(e);
  }
</script>

转载于:https://www.cnblogs.com/fuyun/archive/2007/10/19/930930.html

从留言簿开始,学习MonoRail MVC(三)相关推荐

  1. 学习MonoRail MVC

    从留言簿开始,学习MonoRail MVC(一)   (来自:http://fuyun.cnblogs.com/) 关注MVC开发Web应用程序是看到<一个.NET的MVC Web框架>这 ...

  2. ExtJS学习:MVC模式案例(三)

    在ExtJS案例系列教程的前两讲,我们了解了该案例的最终实现效果,并且在ExtJS学习:MVC模式案例(二)中我们添加Viewport.js和demoController.js两个文件,实现了对整个网 ...

  3. ASP.NET Core 2 学习笔记(三)中间件

    原文:ASP.NET Core 2 学习笔记(三)中间件 之前ASP.NET中使用的HTTP Modules及HTTP Handlers,在ASP.NET Core中已不复存在,取而代之的是Middl ...

  4. spring struts2 mybatis框架学习总结(mvc三层架构)

    spring struts2 mybatis框架学习总结(mvc三层架构) ssi的框架主要是由struts2,spring以及ibatis组成,他们负责各层之间的交互与协作,从而实现整个web端的功 ...

  5. Chrome学习笔记(三):UI组件,皮肤引擎

    原创文章,转载请注明:转载自Soul Apogee 本文链接地址:Chrome学习笔记(三):UI组件,皮肤引擎 -- 控件库 这篇文章是接着上篇文章继续聊的,Chrome的代码实在太多,每一个东西单 ...

  6. 菜鸟Vue学习笔记(三)

    菜鸟Vue学习笔记(三) 本周使用了Vue来操作表单,接下来说下Vue中双向绑定表单元素的用法. Vue中双向绑定是使用的v-model,所谓的双向绑定即改变变量的值,表单元素的值也会改变,同样的,改 ...

  7. python学习之第三课时--基本数据类型及区别,变量

    python学习之第三课时--基本数据类型及区别,变量 基本数据类型及区别 1. 数字类型(int) 数字型--变量值直接是数字,没有双引号""   整数 2. 浮点数(float ...

  8. HTML5 Canvas 学习日志(三)

    2019独角兽企业重金招聘Python工程师标准>>>  HTML5 Canvas 学习日志(三) Canvas的11种合成 蓝色为destination,粉色为source 1 ...

  9. Linux学习之CentOS(三十四)--配置域主DNS服务器

    在上一篇随笔里 Linux学习之CentOS(三十三)--DNS基础及域名系统架构,讲解了DNS的一些基础知识以及域名系统架构,在本篇随笔里将详细地讲解主DNS服务器的配置... 一.DNS服务器的类 ...

最新文章

  1. PHP的Reflection反射机制
  2. (转)Android中尺寸单位杂谈
  3. 精心整理 25 个 Python 文本处理案例,收藏!
  4. 千万别从网页复制粘贴命令
  5. 我给一个团队新成员的信
  6. java下载 文件_Java下载文件的几种方式
  7. OVM虚拟化开启公测,支持Docker全新体验!
  8. rust维京船_rust如何开小地图 | 手游网游页游攻略大全
  9. 一个中专生在华为面试的真实经历!
  10. html播放ppt插件,lightslider-支持移动触摸的轻量级jQuery幻灯片插件
  11. mfrc522 c语言程序,用mxgxw/MFRC522python库和MFRC522读卡器在raspi2上编写ntag213(Mifare ultralightc)...
  12. AXL经典作品推荐恋する乙女と守护の楯 恋爱少女与守护之盾
  13. STM32F4 IAP学习笔记
  14. HP EliteBook长寿命电池挑战耐力极限
  15. emoji表情导致输入框maxlength失效
  16. hue mysql中文乱码_hue的历史查询记录querys乱码问题解决
  17. 问卷中多选题如何分析?
  18. 【FPGA混动】基于FPGA的混沌系统开发
  19. The essence of Murphy‘s Law
  20. 小爱同学 语音唤醒 息屏唤醒 可控麦克风占用 个人制作

热门文章

  1. java读取文件到字符串_Java读取文件到字符串
  2. 如何在Eclipse中从XSD生成XML
  3. wordpress用cdn_如何为WordPress创建自己的自托管CDN
  4. 创建队列 c语言_在C中创建队列
  5. Python字符串title()
  6. android rss_Android RSS阅读器应用程序
  7. junit断言_JUnit断言
  8. 字符串startswith_Python字符串startswith()
  9. 开课吧前端:全栈工程师的职业目的方向是什么呢?
  10. 阿里研究院副院长杨健:新零售领动数字经济