关于asp.net mvc 2:如何通过codebehind获取mvc 2中运行的完整服务器名和端口

how to get full servername and port running in mvc 2 by codebehind

嗨,每个人我都有一个问题

例如,如果我有URL:http://localhost:8512/bookuser/create

如何在MVC2中通过代码隐藏获得"http://localhost:8512"??

谢谢


下面将为您提供请求的协议、主机和端口部分

1
Request.Url.GetLeftPart(UriPartial.Authority)


在MVC3中,最直接的方法是这样做(应该是完全相同的):在.cs中,可以使用如下代码:

1
2
3
4
5
6
7
8
Uri uri = HttpContext.Current.Request.Url;
String absoluteUrlBase = String.Format(
   "{0}://{1}{2}{3}"
    uri.Scheme,
    uri.Host,
    (uri.IsDefaultPort
        ?""
        : String.Format(":{0}", uri.Port));

在a.cshtml中,可以使用

1
2
3
4
5
6
7
string absoluteUrlBase = String.Format(
   "{0}://{1}{2}{3}"
    Request.Url.Scheme
    Request.Url.Host +
    (Request.Url.IsDefaultPort
        ?""
        : String.Format(":{0}", Request.Url.Port));

在这两种情况下,absoluteUrlBase将是http://localhost:8512http://www.contoso.com

或者你可以通过巫术师的链接…


尝试:

Request.Url.AbsoluteUri

这包含有关正在请求的页面的信息。

另外,保留此链接以备将来参考


在"http://"后面查找第一个"/"-这是一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class SName {

    private String  absUrlStr;

    private final static String slash ="/", htMarker ="http://";

    public SName (String s) throws Exception {
            if (s.startsWith (htMarker)) {
                    int slIndex = s.substring(htMarker.length()).indexOf(slash);
                    absUrlStr = (slIndex < 0) ? s : s.substring (0, slIndex + htMarker.length());
            } else {
                    throw new Exception ("[SName] Invalid URL:" + s);
    }}

    public String toString () {
            return"[SName:" + absUrlStr +"]";
    }

    public static void main (String[] args) {
            try {
                    System.out.println (new SName ("http://localhost:8512/bookuser/Create"));
            } catch (Exception ex) {
                    ex.printStackTrace();
}}}