Donald Trump used the first veto of his presidency to block an attempt that would have ended the emergency he declared on the US border with Mexico.
Twelve Republicans had joined Democrats to support Congress's move to stop him from using money designated for other programmes to pay for a wall on the frontier.
Trump said their move was a "vote against reality".
"It is a tremendous national emergency," he said immediately after signing his veto.
"Last month more than 76,000 illegal migrants arrived at our border. We're on track for a million illegal aliens to rush our borders.
"People hate the word invasion but that's what it is it's an invasion of drugs and criminals and people, we have no idea who they are."
Many in the House and Senate are concerned the president is overstepping his authority in an effort to push through his signature campaign promise.
A two-thirds majority is needed in the Senate to override Trump's veto — a figure unlikely to be reached in the Republican-controlled chamber — but House speaker Nancy Pelosi said an attempt would nonetheless begin on March 26.
"The House and Senate resoundingly rejected the president's lawless power grab, yet the president has chosen to continue to defy the Constitution, the Congress and the will of the American people," she said in a statement.
The bipartisan vote was nonetheless seen as a rebuke of the president's plans to circumvent Congress, which is traditionally the body that approves spending plans in the US.
The plan is being challenged in court as an unconstitutional usurpation of Congress' power of the purse.