检查输入是否为 GUID

Checking if input is GUID or not

我正在做这个小项目,我要做的是检查用户输入是否为 GUID。

我在 SQL 上创建了这个存储过程,它工作得很好。

ALTER procedure [dbo].[oid_validation] @oid varchar(max)
as
BEGIN TRY

if  (TRY_CAST(@oid as uniqueidentifier) IS NOT NULL)
begin
 (select select * From Student where oid=@oid)
end
else begin
select 'KO'
end 

end TRY
Begin CATCH
print('error')
end CATCH

另一方面,在我的 ASP.NET MVC 应用程序上,我想根据输入是否为 GUID 显示此过程 returns 的数据。 所以我的观点是:

 @foreach (DataRow row in Model.Rows)
            {
              
                    <div class="ct1">
                        <h4>Oid: </h4>
                        <h4>Name: </h4>
                        <h4>Lastname: </h4>
                        <h4>Study_Year: </h4>
                        <h4>Birthday: </h4>
                        <h4>City:</h4>
                    </div>
                    <div class="ct2">
                        <h4>@row["oid"]</h4>
                        <h4>@row["Name"]</h4>
                        <h4>@row["Lastname"]</h4>
                        <h4>@row["StudyYear"]</h4>
                        <h4>@row["Birthday"]</h4>
                        <h4>@row["City"]</h4>
                    </div>
                }

这也很好用。这样,用户将再次看到他们想要的数据,*基于该输入是否为 guid。 现在我要做的是操纵某些东西,以便在用户输入无效输入时显示一些文本或重定向到其他地方;

像这样:

if(userinput!=guid)
{
<h4>Your data is invalid, please check your string!</h4>
}
else
{
//foreach(...)
{
<data1>

@<data1>
}
}

您始终可以使用正则表达式来检查输入:

//returns true
Regex.IsMatch(Guid.NewGuid().ToString(), @"(?im)^[{(]?[0-9A-F]{8}[-]?(?:[0-9A-F]{4}[-]?){3}[0-9A-F]{12}[)}]?$") 

或使用建议的内置函数:

Guid g;

if (Guid.TryParse(Guid.NewGuid().ToString(), out g))
{
    return "Success";
}

我认为您在错误的级别进行输入验证。您的存储过程应该采用唯一标识符,并且您应该在对 ASP.NET MVC 端点进行任何操作之前验证输入。

例如

ActionResult SearchStudents(SearchParams searchParams) {
     if (!ModelState.IsValid) ... handle validation errors

     ... Call your stored procedure once valid
}

class SearchParams {
    [Required]
    Guid StudentId { get; set;}
}