如何检查网址是否属于存在的网站?

时间:2018-01-26 06:45:40

标签: asp.net-mvc twitter-bootstrap-3

我正在创建一个网站,用户可以在表单中输入网页地址。我打算检查网址格式是否正确,就像我认为是一种草率的方式的实际网址,而我想检查网址是否属于一个真实的网站。比如,让我们说用户输入www.pyrtyrmyrsyr.org,这是一个有效的地址,但它不会导致网站。让我们说用户输入www.python.org,这是一个有效的地址,并通向一个存在的网站。

如何在发送表单之前和输入之后检查此有效性?制作表格"发送"如果网址无效,按钮无法点击?

编辑:已实现我没有添加任何我的观点代码,为此道歉,也忘了提及我使用Bootstrap for View。

这是我使用的形式,我要做的是使用" Check"按钮,检查有效性,在表格控件中使用" id = url"

<div>
    <div class="row">
        <div class="col-md-12">
            <h2 style="margin-left:20px; margin-top:10px">Add a Link</h2>
            <form action="~/Link/Create" method="post">
                <div class="form-group well clearfix" style="margin-left:20px; margin-right:20px; margin-top:20px">
                    <br />
                    <div class="row">
                        <label for="name" class="col-lg-2">URL:</label>
                        <div class="col-lg-9">
                            <input class="form-control" id="url" placeholder="URL" name="Address" /><br />
                        </div>
                        <div class="col-lg-1">
                            <button type="button" class="btn btn-primary" id="checkurl">Check</button>
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-lg-2">
                    <label for="name">Interval:</label>
                        </div>
                    <!--<div class="col-lg-10">
                        <input class="form-control" placeholder="Interval to check (minutes)" name="Interval" /><br />
                    </div>-->
                    <div class="col-lg-5">
                    <select class="form-control" id="sel1">
                        <option>Minutes</option>
                        <option>Hours</option>
                        <option>Days</option>
                        <option>Weeks</option>
                        <option>Months</option>
                    </select>
                    </div>
                        <div class="col-lg-5">
                            <select class="form-control" id="sel2">
                                <option>Minutes</option>
                                <option>Hours</option>
                                <option>Days</option>
                                <option>Weeks</option>
                                <option>Months</option>
                            </select>
                        </div>
                    </div>
                    <div class="row">
                    <button class="btn btn-success pull-right" type="submit" style="width:200px; margin-right:15px">Save</button>
                    </div>
                </div>
            </form>
        </div>
    </div>
</div>

据我搜索到目前为止,使用Javascript或类似的东西无法连接到另一个域/网站,所以我需要一个服务器端语言,所以我需要拿这个url,发送它来控制并返回一个true检查连接后的/ false值。

2 个答案:

答案 0 :(得分:1)

您可以在Asp.NET MVC中使用远程验证。让您在模型中拥有以下属性。

public string URL {get; set;}

将Remote属性添加到您的媒体资源中,例如

[Remote("YourAction", "YourController", HttpMethod = "GET", ErrorMessage = "URL is not valid.")]
public string URL {get; set;}

现在在控制器的指定操作中编写以下代码。

public class YourController : Controller
{

        [AllowAnonymous]
        public ActionResult YourAction(string URL)
        {
            try
            {
               //Check here by hitting your URL using HTTPClient or WebClient that it is returning something or not.
                WebClient wc = new WebClient();
                string HTMLSource = wc.DownloadString(URL);
                return Json(true, JsonRequestBehavior.AllowGet); //Return true if it is valid.
            }
            catch (Exception)
            {
                return Json(false, JsonRequestBehavior.AllowGet); //Return false if it is not vald.
            }
        }
}

您必须在web.config中添加以下配置

<appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>

您在视图中的代码就像

 @Html.EditorFor(model => model.URL, new { type = "url", @class = "form-control", placeholder = "URL" } })
 @Html.ValidationMessageFor(model => model.URL, "", new { @class = "text-danger" })

答案 1 :(得分:0)

解决了它:

在我的模型中添加了一个bool:

    public bool Valid { get; set; }

稍微改变了我的观点:

<div class="row">
    <label for="name" class="col-lg-2">URL:</label>
        <div class="col-lg-9">
            <input class="form-control" id="url" placeholder="URL" name="Address" /><br />
        </div>
        <div class="col-lg-1">
            <button type="button" class="btn btn-primary pull-right" id="checkurl">Check</button>
         </div>
             <input type="hidden" name="Valid" id="Validity"/>
</div>

使用以下代码,一个用于检查有效性,另一个用于在输入更改时重置可用的表单

$('#checkurl').click(function () {
    var address = $('#url').val();
    $.ajax({
        url: "/Control/CheckUrl",
        type: "POST",
        data: JSON.stringify({ url: address }),
        cache: false,
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        error: function (xhr) {
            alert('Error: ' + xhr.statusText);
        },
        success: function (result) {
            if (result) {
                document.getElementById("Validity").value = true;
                document.getElementById("saveBut").disabled = false;
            }
            else {
                document.getElementById("Validity").value = false;
                document.getElementById("saveBut").disabled = true;
            }
        },
        async: true,
        processData: false
    });
});

$('#url').change(function ()
{
    if (document.getElementById("saveBut").disabled == false)
    {
        document.getElementById("Validity").value = false;
        document.getElementById("saveBut").disabled = true;
    }
});

Ajax代码导致控制器函数重新格式化URL并检查有效性:

public ActionResult CheckUrl(string url)
{
    try
    {
        if (String.IsNullOrEmpty(url)) return Json(false, JsonRequestBehavior.AllowGet); ;
        if (url.Equals("about:blank")) return Json(false, JsonRequestBehavior.AllowGet); ;
        if (!url.StartsWith("http://") && !url.StartsWith("https://"))
        {
            url = "http://" + url;
        }
        WebClient wc = new WebClient();
        string HTMLSource = wc.DownloadString(url);
        return Json(true, JsonRequestBehavior.AllowGet);
    }
    catch (Exception)
    {
        return Json(false, JsonRequestBehavior.AllowGet);
    }
}

它完美无瑕地工作。